如何根据对象状态改变表单字段的需求?

时间:2013-04-07 14:43:13

标签: python django forms django-admin

是否可以根据对象状态更改表单字段的必需属性(在modelforms和admin中 - 如果可能)?

例如:我的数据库模型包含status字段,并且根据当前对象状态,在某些状态值中应该需要一些其他字段,在其他状态值中可以选择其他字段。

1 个答案:

答案 0 :(得分:0)

更好的是,你可以在Model级别上进行。

来自Django docs

class MyModel(models.Model):
    .... some fields here...

    def clean(self):
        from django.core.exceptions import ValidationError
        # Don't allow draft entries to have a pub_date.
        if self.status == 'draft' and self.pub_date is not None:
            raise ValidationError('Draft entries may not have a publication date.')
        # Set the pub_date for published items if it hasn't been set already.
        if self.status == 'published' and self.pub_date is None:
            self.pub_date = datetime.date.today()

否则,如果这与db模型没有特别的联系,你可以 类似地定义模型表单的clean方法。

请参阅here

更新:我刚收到你提到的required属性。

无需动态更改所需属性。 首先,RDBMS不支持这一点。要么有约束 或者没有。因为这是业务逻辑而不是DB逻辑, 你应该把null=True放在这些字段上(必需= False,在表单字段上),并处理它们 正如我上面所说明的那样。