В админке Django, могу ли я требовать поля в модели, но не когда она встроена? - PullRequest
9 голосов
/ 30 июня 2009

В django admin есть поля, которые я бы хотел заполнить, если модель редактируется автономно. Если он встроенный, я не хочу, чтобы они были необходимы. Есть ли способ сделать это?

Ответы [ 2 ]

21 голосов
/ 30 апреля 2011

Хотя ответ Даниэля Роузмана работает, это не лучшее решение. Это требует небольшого дублирования кода, поскольку необходимо повторно объявить поле формы. Например, если у вас есть verbose_name в этом поле, вам также придется добавить label='My verbose_name already set on model' к строке CharField, так как повторное объявление всего поля в основном стирает все, что установлено в вашей модели для этого поля.

Лучший подход - переопределить метод формы __init__ и явно установить field.required в True или False.

class MyModelForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(MyModelForm, self).__init__(*args, **kwargs)

        self.fields['myfield'].required = True
10 голосов
/ 30 июня 2009

Конечно. Просто определите пользовательскую форму с обязательным переопределением обязательного поля, чтобы установить required = True, и используйте ее в своем классе администратора.

class MyForm(forms.ModelForm):
    required_field = forms.CharField(required=True)

    class Meta:
        model = MyModel

class MyAdmin(admin.ModelAdmin):
    form = MyForm


class MyInlineAdmin(admin.ModelAdmin):
    model = MyModel

Так что здесь MyAdmin использует переопределенную форму, а MyInlineAdmin - нет.

...