Django:反向访问器与反向访问器发生冲突

问题描述 投票:0回答:1

在下面的代码中,我有一个帖子、点赞、评论模型。当我尝试迁移模型以激活它时,我收到反向访问器错误。对于

Likes
来说,
user_that_liked
只能点一次,而
user_liked_to
可以有很多次点赞。对于
Comment
user_that_commented
user_commented_to
都可以有很多评论。我应该如何设置模型,以便可以对模型执行我想要的操作,同时解决此问题。如果您需要更多信息,请告诉我。

from django.db import models
from django.contrib.auth.models import User


class Post(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    post_question = models.CharField(max_length=200)
    pub_date = models.DateTimeField()


class Likes(models.Model):
    user_that_liked = models.ForeignKey(User, on_delete=models.CASCADE)
    user_liked_to = models.ForeignKey(User, on_delete=models.CASCADE)
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    date = models.DateTimeField()
    like_or_dislike = models.IntegerField(default=0)


class Comment(models.Model):
    user_that_commented = models.ForeignKey(User, on_delete=models.CASCADE)
    user_commented_to = models.ForeignKey(User, on_delete=models.CASCADE)
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    date = models.DateTimeField()
    comment = models.CharField(max_length=300)
python django django-models
1个回答
4
投票

您需要指定相关名称来区分关系

class Post(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    post_question = models.CharField(max_length=200)
    pub_date = models.DateTimeField()


class Likes(models.Model):
    user_that_liked = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_that_liked')
    user_liked_to = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_liked_to')
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    date = models.DateTimeField()
    like_or_dislike = models.IntegerField(default=0)


class Comment(models.Model):
    user_that_commented = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_that_commented')
    user_commented_to = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_commented_to')
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    date = models.DateTimeField()
    comment = models.CharField(max_length=300)

但是,携带这些用户关系感觉有点多余,因为

Likes
只能有
user_that_liked
,而
user_liked_to
可以从喜欢的对象中派生出来。 (评论也一样)

那么 - 可以通过

like.post.user
找到“喜欢”的用户,并通过
like.user_that_liked

找到喜欢的用户
© www.soinside.com 2019 - 2024. All rights reserved.