我正在学习django,并试图创建一个简单的问答应用程序,用户也可以喜欢问题和/或答案。现在我想要做的是跟踪谁喜欢一个特定的问题/答案,所以我创建了一个单独的模型来跟踪它,如下所示:
class Votes(models.Model):
answer_id = models.ForeignKey(Answers, related_name='likes_answers', null=True, default=None, db_column='answer_id')
question_id = models.ForeignKey(Questions, related_name='likes_questions', null=True, default=None, db_column='question_id')
likes_count = models.IntegerField(blank=True, default=0)
liked_by = models.ForeignKey(User, related_name='like_user', null=True, default=None, on_delete=models.CASCADE)现在这种方法的问题是,每次喜欢一个问题或答案时,都会有一个条目进入这个模型,这将为不同用户的相同question_id或answer_id创建多个条目。虽然用户不同,但很多answer_ids和question_ids都采用了repeated...Is的正确方法,或者我可以让它变得更好?
发布于 2017-03-05 20:23:15
我想更好的方法是使用多对多字段:用户可以喜欢多个问题/答案,而问题/答案可能会被多个用户喜欢。
假设您的答案有一个特定问题的外键,模型可能如下所示:
class Question(models.Model):
# .. other attributes
liked_by = models.ManyToManyField(User, related_name = 'liked_question')
class Answer(models.Model):
question = models.ForeignKey(Question)
# .. other attributes
liked_by = models.ManyToManyField(User, related_name = 'liked_answer')要获得所有喜欢答案的用户,您可以使用
answer_object.liked_by.all()对于(经常使用的) likes,您可以简单地使用
answer_object.liked_by.count()多对多字段也以相反的方式工作,所以要确定用户的喜好,您可以使用(感谢相关的名称)
user_object.liked_question_set.all()
user_object.liked_answer_set.all()发布于 2017-03-05 17:39:25
这不是一个python、django问题,而是一个RDBMS设计问题。
但是为了回答你的问题,
如果你想检查用户投票的副本,那么这是正确的方法。
另一种方法是将投票帖子id更新为用户表。这当然是一种糟糕的方法。
https://stackoverflow.com/questions/42606402
复制相似问题