Django 两个字段之间的唯一约束,无论顺序如何

Django 两个字段之间的唯一约束,无论顺序如何,django,django-models,django-constraints,Django,Django Models,Django Constraints,该程序有一个表,表示两个用户之间的关系: class联系人(models.Model): 用户_from=models.ForeignKey( “用户”, 在_delete=models.CASCADE上, related_name=“rel_to_from”, help_text=u(“发送联系请求的人”), ) 用户\u to=models.ForeignKey( “用户”, 在_delete=models.CASCADE上, related_name=“rel_to_set”, help_

该程序有一个表,表示两个用户之间的关系:

class联系人(models.Model):
用户_from=models.ForeignKey(
“用户”,
在_delete=models.CASCADE上,
related_name=“rel_to_from”,
help_text=u(“发送联系请求的人”),
)
用户\u to=models.ForeignKey(
“用户”,
在_delete=models.CASCADE上,
related_name=“rel_to_set”,
help_text=u(“收到联系请求的人”),
)
....
问题在于约束,到目前为止我定义的约束是:

。。。。
类元:
约束=[
模型.唯一约束(
字段=(“用户从”、“用户到”),
name=“%(应用程序标签)s\u%(类)s\u唯一用户\u字段”,
),
模型。检查约束(
check=~models.Q(user\u from=models.F(“user\u to”),
name=“%(应用程序标签)s\u%(类)s\u唯一用户\u字段”,
),
]
第一个检查
(user\u-from,user\u-to)
之间的唯一约束,第二个检查
user\u-from
是否不同于
user\u-to
,但这两个检查都不能阻止使用相反的角色创建联系人,即,如果已经存在
user\u from=user1
user\u to=user2
的关系,则没有任何内容阻止创建
user\u from=user2
user\u to=user1


是否存在添加此约束的表单?或者,解决方案是仅在应用程序层?中创建约束,如覆盖保存方法并检查此约束。

此讨论可能对您有所帮助: