【问题标题】:Django: constrain foreign key to only rows with the same idDjango:将外键限制为仅具有相同ID的行
【发布时间】:2019-03-05 10:59:36
【问题描述】:

对于一个 Django 项目,我有两个模型:

class User(AbstractUser):
    child = models.ForeignKey('children.Child', null=True, on_delete=models.SET_NULL)

还有以下内容:

class Child(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)

我想要的是User.child 只能设置为具有child.user_id = user.id 的实体,最好有一个约束。这可能吗?如果重要的话,我正在使用 PostgreSQL

【问题讨论】:

    标签: python sql django postgresql django-models


    【解决方案1】:

    您不是在寻找one-to-one relationship 吗?

    • Child 中的user 只能设置为一个User
    • User 中的child 也只能设置为一个Child
    • 您希望Child 中的userUser 中的child 指向彼此。

    这正是一对一的关系。以下代码比您当前的代码更简单,它在数据库级别强制执行约束:

    class User(AbstractUser):
        # The relationship only needs to be defined in one of the models
        pass
    
    class Child(models.Model):
        user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
    

    如果您需要涵盖更精细的点(例如,如果在某些情况下您需要在一个方向而不是在另一个方向上定义关系),那么请阐明用例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 2020-12-23
      • 2021-12-25
      • 2017-07-02
      • 2015-09-23
      相关资源
      最近更新 更多