Django 1.8在模型级别自定义验证两个字段的最佳位置,其中一个字段是FK?
我有这样的模型:Django 1.8在模型级别自定义验证两个字段的最佳位置,其中一个字段是FK?,django,validation,django-models,Django,Validation,Django Models,我有这样的模型: class Item(models.Model): number = models.CharField() menu = models.ForeignKey(Menu) class Meta: unique_together = ('number', 'menu') 我想验证的是,“数字”在某些菜单中是唯一的,但忽略大小写。例如,如果('a1',1),则不允许('a1',1) 1) 我希望在模型级别进行此验证,而不是表单 2) 我想在数据库中
class Item(models.Model):
number = models.CharField()
menu = models.ForeignKey(Menu)
class Meta:
unique_together = ('number', 'menu')
我想验证的是,“数字”在某些菜单中是唯一的,但忽略大小写。例如,如果('a1',1)
,则不允许('a1',1)
1) 我希望在模型级别进行此验证,而不是表单
2) 我想在数据库中存储输入时给出的数字值
我的第一个方法是在model的clean
方法中执行,但是FK字段菜单的值总是为None,所以我得到了relatedobjectdoesnotextist
。Django 1.8是否存在问题,或者在clean模型中永远无法处理fk字段
我注意到,在save
方法中,我可以访问FK,但我无法提出ValidationError
,这将对用户很好地处理
验证它的最佳策略是什么?请参阅
简而言之,在保存之前,您只需item.number=value.lower()
。如果这在您的情况下不会造成太大的开销,您可以保留一列用于验证目的。