Django管理员:动态地将必填字段设置为非必填字段

Django管理员:动态地将必填字段设置为非必填字段,django,dynamic,field,admin,Django,Dynamic,Field,Admin,当另一个[关联]字段具有特定值时,如何将必填字段设置为非必填字段 假设我有以下模型: class foo(models.Model): bar = models.CharField(max_length=200) foo_date = models.DateTimeField() 当我保存时,并且bar包含一个特定的值,我希望foo_date变成非强制性的。我如何做到这一点?谢谢。我认为只需将foo_barr设置为blank=True,然后实现您自己的表单和自定义验证以供管理员

当另一个[关联]字段具有特定值时,如何将必填字段设置为非必填字段

假设我有以下模型:

class foo(models.Model):
    bar = models.CharField(max_length=200)
    foo_date = models.DateTimeField()

当我保存时,并且bar包含一个特定的值,我希望foo_date变成非强制性的。我如何做到这一点?谢谢。

我认为只需将foo_barr设置为blank=True,然后实现您自己的表单和自定义验证以供管理员模型使用。请参阅文档的这一部分--

T.Stone是对的。以下是使用模型表单执行此操作的方式:

class foo(models.Model):
    bar = models.CharField(max_length=200)
    foo_date = models.DateTimeField()

class ClientAdmin( MyModelAdmin ):
    form = FooModelForm

class FooModelForm( forms.ModelForm ):

    def clean(self):
        cleaned_data = self.cleaned_data
        if cleaned_data.get("bar") == 'some_val' and not cleaned_data.get('foo_date'):
            msg = 'Field Foo Date is mandatory when bar is some_val'
            self._errors[field] = ErrorList([msg])
            del cleaned_data[field]
        return cleaned_data