在Django admin中,我可以要求模型中的字段,但不能要求模型内联时的字段吗?

在Django admin中,我可以要求模型中的字段,但不能要求模型内联时的字段吗?,django,django-admin,Django,Django Admin,在django admin中,如果单独编辑模型,我需要一些字段。如果是内联的,我不希望它们是必需的。有没有办法做到这一点?当然。只需定义一个自定义表单,将您的必填字段覆盖为设置required=True,并在您的管理类中使用它 from django import forms class MyForm(forms.ModelForm): required_field = forms.CharField(required=True) class Meta: mo

在django admin中,如果单独编辑模型,我需要一些字段。如果是内联的,我不希望它们是必需的。有没有办法做到这一点?

当然。只需定义一个自定义表单,将您的必填字段覆盖为设置required=True,并在您的管理类中使用它

from django import forms

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不是。

虽然Daniel Roseman的答案有效,但这不是最好的解决方案。由于必须重新声明表单字段,因此需要一些代码重复。例如,如果该字段上有一个
verbose\u名称
,则还必须将
label='My verbose\u name ready set on model'
添加到
CharField
行,因为重新声明整个字段基本上会删除模型上为该字段设置的所有内容

更好的方法是重写表单的
\uuu init\uuu
方法,并在那里显式地将
字段.required
设置为
True
False

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

        self.fields['myfield'].required = True

正如人们所知,它也适用于django.contrib.auth.forms.UserChangeForm的实例