【问题标题】:How to change requirement of form field based on object state?如何根据对象状态更改表单字段的要求?
【发布时间】:2013-04-07 14:43:13
【问题描述】:

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

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

【问题讨论】:

    标签: python django forms django-admin


    【解决方案1】:

    更好的是,您可以在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 不支持这一点。要么有约束 或者没有。因此,由于这是业务逻辑而不是数据库逻辑, 您应该将null=True 放在这些字段上(必需=False,在表单字段上),然后处理它们 正如我在上面所展示的那样。

    【讨论】:

    • 这正是我所缺少的,我已经拥有并且模型中的null=True
    猜你喜欢
    • 1970-01-01
    • 2021-06-14
    • 2016-05-24
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多