微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

class Contact(models.Model):
    user_from = models.ForeignKey(
        "User",on_delete=models.CASCADE,related_name="rel_to_from",help_text=_("Person who sent the contact request"),)
    user_to = models.ForeignKey(
        "User",related_name="rel_to_set",help_text=_("Person who receive the contact request"),)
    ....

问题出在约束上,我到目前为止定义的约束是:

    ....
    class Meta:
        constraints = [
            models.UniqueConstraint(
                fields=("user_from","user_to"),name="%(app_label)s_%(class)s_unique_user_field",),models.CheckConstraint(
                check=~models.Q(user_from=models.F("user_to")),]

一个检查 (user_from,user_to)间的唯一约束,第二个检查 user_fromuser_to 不同,但两者都不会阻止使用角色互换,也就是说,如果在 user_from=user1user_to=user2 处已经存在关系,则不会阻止创建 user_from=user2user_to=user1

是否存在某种形式来添加此约束?或者解决方案是仅在应用层创建约束?,例如覆盖保存方法并检查此约束。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。