首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Django模型基础知识

Python Django模型基础知识
EN

Stack Overflow用户
提问于 2017-03-05 16:59:49
回答 2查看 44关注 0票数 0

我正在学习django,并试图创建一个简单的问答应用程序,用户也可以喜欢问题和/或答案。现在我想要做的是跟踪谁喜欢一个特定的问题/答案,所以我创建了一个单独的模型来跟踪它,如下所示:

代码语言:javascript
复制
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的正确方法,或者我可以让它变得更好?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-05 20:23:15

我想更好的方法是使用多对多字段:用户可以喜欢多个问题/答案,而问题/答案可能会被多个用户喜欢。

假设您的答案有一个特定问题的外键,模型可能如下所示:

代码语言:javascript
复制
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')

要获得所有喜欢答案的用户,您可以使用

代码语言:javascript
复制
 answer_object.liked_by.all()

对于(经常使用的) likes,您可以简单地使用

代码语言:javascript
复制
answer_object.liked_by.count()

多对多字段也以相反的方式工作,所以要确定用户的喜好,您可以使用(感谢相关的名称)

代码语言:javascript
复制
user_object.liked_question_set.all()

user_object.liked_answer_set.all()
票数 1
EN

Stack Overflow用户

发布于 2017-03-05 17:39:25

这不是一个python、django问题,而是一个RDBMS设计问题。

但是为了回答你的问题,

如果你想检查用户投票的副本,那么这是正确的方法。

另一种方法是将投票帖子id更新为用户表。这当然是一种糟糕的方法。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42606402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档