Django 1.8在模型级别上自定义验证两个字段的最佳位置,其中一个是FK?

时间:2015-09-23 21:36:54

标签: 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)我希望在数据库中存储数字,如输入中给出的数字

我的第一种方法是在模型的clean方法中执行此操作,但FK字段menu的值始终为None,因此我得到了RelatedObjectDoesNotExist。这是Django 1.8的问题还是永远无法处理模型清理中的fk字段?

我注意到在save方法中我可以访问FK,但我无法提出ValidationError,这将为用户处理好。

验证它的最佳策略是什么?

1 个答案:

答案 0 :(得分:1)

请参阅this ticket

简而言之,您可以在保存之前item.number = value.lower()