Python 防止Django中外键的排列
我有一个django模型,如下所示:Python 防止Django中外键的排列,python,django,Python,Django,我有一个django模型,如下所示: class ModelName(models.Model): field_one = models.ForeignKey(Table_One, related_name="field_one") field_two = models.ForeignKey(Table_One, related_name="field_two") 我知道,unique\u合在一起可以用来确保不能重复输入 例如,如果上表: unique_together = [
class ModelName(models.Model):
field_one = models.ForeignKey(Table_One, related_name="field_one")
field_two = models.ForeignKey(Table_One, related_name="field_two")
我知道,unique\u合在一起
可以用来确保不能重复输入
例如,如果上表:
unique_together = ['field_one', 'field_two']
然后,您可以为field\u one
输入A
和field\u two
输入B
等值。但是,不能再次输入相同的条目。但这也允许为字段1
输入B
,为字段2
输入A
,根据我的控制器逻辑,这与A和B
相同
我需要确保如果为相应字段输入了A和B,则不能再次输入B和A
如何仅允许具有唯一组合的条目 我将覆盖模型的
clean
方法,并提出ValidationError
。这是一个可以对模型实施额外约束的地方
但是请注意,只有在ModelForm的有效()之后才会调用此方法
样本清洁验证代码
from django.db.models import Q
def clean(self):
mn = ModelName.objects.filter(Q(field_one=self.field_one,field_two=field_two)|Q(field_one=self.field_two,field_two=field_one))
if mn.exists():
raise ValidationError('Already exist')
这是可行的,但是
ValidationError
给了我“ValidationError”对象没有属性“error\u dict”
error。