在Django admin中,我可以要求模型中的字段,但不能要求模型内联时的字段吗?
在django admin中,如果单独编辑模型,我需要一些字段。如果是内联的,我不希望它们是必需的。有没有办法做到这一点?当然。只需定义一个自定义表单,将您的必填字段覆盖为设置required=True,并在您的管理类中使用它在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
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的实例