我有以下型号:Django模型的关系困惑
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'的定义添加/更改related_name参数。
User和Post模型之间存在多对多关系。每个用户可以喜欢很多帖子,每个帖子都可以被许多用户喜欢。 用户和帖子模型之间也有多对一的关系。每个用户可以写很多帖子,每个帖子只能由一个用户写入。
默认情况下,不应该反向查询“User.posts”的名称为user_set。如果是这样,为什么这个名字与字段名'Post.user'冲突?有人可以解释这个错误的含义吗?谢谢。
嗨弗兰尼。您提供的示例解决了User和Post模型之间的一对多关系。但用户和帖子模型之间也存在多对多的关系(用户可以喜欢很多帖子,并且帖子可以被许多用户喜欢)。为了实现这种关系,我创建了UserPost,它是一个连接表。我的问题是为什么User.posts的反向查询名称(默认情况下应为user_set)与字段名称Post.user相冲突? –