【发布时间】:2013-04-07 14:43:13
【问题描述】:
是否可以根据对象状态更改表单字段的必需属性(在模型表单和管理员中 - 如果可能)?
例如:我的 DB 模型包含 status 字段,并且根据当前对象状态,某些状态值中应该需要一些其他字段,而在其他状态值中应该是可选的。
【问题讨论】:
标签: python django forms django-admin
是否可以根据对象状态更改表单字段的必需属性(在模型表单和管理员中 - 如果可能)?
例如:我的 DB 模型包含 status 字段,并且根据当前对象状态,某些状态值中应该需要一些其他字段,而在其他状态值中应该是可选的。
【问题讨论】:
标签: python django forms django-admin
更好的是,您可以在Model 级别上做到这一点。
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