Skip to main content
 首页 » 编程设计

python之防止 Django 中的外键排列

2024年10月24日38zhengyun_ustc

我有一个 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_together 可用于确保不会出现重复条目​​。

例如,如果对于上表:

unique_together = ['field_one', 'field_two'] 

然后您可以输入值,例如 A 用于 field_one 和 B 用于 field_two。但是,您不能再次进行相同的输入。但这也允许 field_one 的条目 B 和 field_two 的 A,根据我的 Controller 逻辑,这是相同的作为 A 和 B。

我需要确保如果在各自的字段中输入了 A 和 B,则不能再次输入 B 和 A。

如何只允许输入唯一组合?

请您参考如下方法:

示例干净的验证代码,

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