【问题标题】:Django composite unique on multiple model fieldsDjango 复合在多个模型字段上是唯一的
【发布时间】:2015-06-10 07:07:37
【问题描述】:

假设我有一个社交网络帖子、用户和喜欢的模型:

class Post(models.Model):
    submitter = models.ForeignKey(User, null=False, default=None)
    content = models.CharField()
    date = models.DateField()

    with_likes = PostLikeCountManager()
    objects = models.Manager()

class Like(models.Model):
    user = models.ForeignKey(User)
    post = models.ForeignKey(Post)
    time = models.DateTimeField(auto_now_add=True)

Post 模型视为代表Facebook 帖子会很有帮助。现在,我想限制每个用户的每个帖子一个赞。我该如何做到这一点?一种方法是在 Like 类的 (user, post) 属性上创建复合主键。我不知道如何在 Django 中实现这一点。另一种是同时在两个属性上使用unique=True。这可能吗?

谢谢。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    是的,使用unique_together

    class Like(models.Model):
        user = models.ForeignKey(User)
        post = models.ForeignKey(Post)
        time = models.DateTimeField(auto_now_add=True)
    
        class Meta:
            unique_together = ('user', 'post')
    

    【讨论】:

      【解决方案2】:

      unique_together 将在未来的版本中被弃用,您可以改为应用UniqueConstraintThisthis link 给出了示例代码。

      class Like(models.Model):
          user = models.ForeignKey(User)
          post = models.ForeignKey(Post)
          time = models.DateTimeField(auto_now_add=True)
      
          class Meta:
              constraints = [
                  models.UniqueConstraint(fields=['user', 'post'], name='unique_user_post'),
              ]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-22
        • 2021-09-30
        • 2021-07-17
        • 1970-01-01
        相关资源
        最近更新 更多