fox_12
@fox_12
Расставляю биты, управляю заряженными частицами

Динамическая форма редактирования объекта в админке Django?

Допустим у меня есть модель (на самом деле модель гораздо сложнее с использованием mptt polymorphic tree):
class MyModel(models.Model):
     CHOICES = (
            (1, 'Type1'),
            (2, 'Type2')
     )
     my_type = models.Integerfield(choices=CHOICES)
     field1 =
     field2 = 
     field3 =
     field4 = 
    ....


Как сделать, чтобы в админке Django при редактировании скажем экземпляра с my_type='Type1' показывались только поля скажем field1 и field2, а при редактировании экземпляра с my_type='Type2' - только поля field4 и field5?
По сути мне необходимо чтобы вызывалась форма с полями, касающимися конкретного типа, а не простыня со всеми возможными полями.
  • Вопрос задан
  • 659 просмотров
Решения вопроса 1
winordie
@winordie
Лучшая документация -- исходники
class MyModelAdmin(admin.ModelAdmin):
    my_filter = {1: ('field1', 'field2'), 2: ('field3', 'field4')}
    def get_fields(self, request, obj=None):
        fields = super().get_fields(request, obj)
        if obj is None:
            return fields
        return [f for f in fields if f not in self.my_filter[obj.my_type]]

Но это будет работать только при изменении объекта.
Если нужно динамически при создании, то тут только js, ловишь изменение поля my_type и скрываешь/показываешь необходимые поля.
class MyModelAdmin(admin.ModelAdmin):
    class Media:
        js = (
            'js/my_fields_filter.js',
        )
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы