【问题标题】:Django Models Relationship ConfusionsDjango 模型关系混淆
【发布时间】:2017-09-15 00:38:47
【问题描述】:

我有以下型号:

class UserPost(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add=True)

class User(AbstractUser):
    MALE = 'M'
    FEMALE = 'F'
    GENDER_CHOICES = (
        (MALE, 'Male'),
        (FEMALE, 'Female')
    )
    posts = models.ManyToManyField(Post, through='UserPost')
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

class Post(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=100)
    content = models.TextField()
    status = models.CharField(max_length=100)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

当我运行 python manage.py makemigrations 时,它会引发以下错误:

users.User.posts:(fields.E303)“User.posts”的反向查询名称与字段名称“Post.user”冲突。 提示:重命名字段“Post.user”,或在字段“User.posts”的定义中添加/更改相关名称参数。

User 和 Post 模型之间存在多对多的关系。每个用户可以喜欢很多帖子,并且每个帖子可以被很多用户喜欢。 User 和 Post 模型之间也存在多对一的关系。每个用户可以写多篇文章,每篇文章只能由一个用户写。

默认情况下,'User.posts' 的反向查询名称不应为 user_set。如果是这样,为什么此名称与字段名称“Post.user”冲突?有人可以解释这个错误的含义吗?谢谢。

【问题讨论】:

    标签: python django


    【解决方案1】:

    您需要UserPost 模型吗?它看起来与Post 具有所有相同的字段,如果您在高效查询之后,Django automatically creates database indexes on foreign keys。这是一个应该可以很好地工作的简单设置:

    class User(AbstractUser):
        # Your fields go here, but you might not need the posts field
    
    class Post(models.Model):
        user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='posts')
    

    这将让您执行user.posts.all() 来获取属于该user 的所有Post 实例。

    【讨论】:

      猜你喜欢
      • 2014-02-25
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      • 2017-02-10
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多