Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 1.8在模型级别自定义验证两个字段的最佳位置,其中一个字段是FK?_Django_Validation_Django Models - Fatal编程技术网

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()

如果这在您的情况下不会造成太大的开销,您可以保留一列用于验证目的。