我试图解决下面的问题,经过一些搜索后,似乎是在Django中开放的bug.我通过向模型子项添加类方法来解决该问题,虽然此解决方案有效,但仍需要使用此子类对任何(模型)表单进行另一次自定义检查.我发布这个比其他人更快找到解决方案,其他解决方案也是受欢迎的.
class Foo(models.Model):
attr1 = models.IntegerField()
attr2 = models.IntegerField()
class Meta:
unique_together = (
('attr1','attr2'),)
class Bar(Foo):
attr3 = models.IntegerField()
class Meta:
unique_together = (
('attr1','attr3'),)
提出:
Unhandled exception in thread started by display_num_errors=True)
File "/Users/intelliadmin/VirtualEnvs/virtenv9/lib/python2.7/site-packages/django/core/management/base.py",line 270,in validate
raise CommandError("One or more models did not validate:\n%s" % error_text)
django.core.management.base.CommandError: One or more models did not validate:
app.Bar: "unique_together" refers to attr1. This is not in the same model as the unique_together statement.
最佳答案
可能的解决方案:
class Bar:
# fields...
@classmethod
def _validate_unique(cls,self):
try:
obj = cls._default_manager.get(attr1=self.attr1,attr3=self.attr3)
if not obj == self:
raise IntegrityError('Duplicate')
except cls.DoesNotExist:
pass
def clean(self):
self._validate_unique(self)
super(Bar,self).clean()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。