我正在学习Django,并试图创建一个简单的问题回答应用程序,其中用户也可以喜欢的问题和/或答案。现在我要做的就是跟踪谁喜欢的特定问题/答案,所以我创建了一个单独的模型来跟踪这个如下:Python的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正在重复......是正确的方法,还是我可以做得更好?
不要称他们为“answer_id”,而只是“回答”。 Django将在幕后自动添加“_id”部分。另外,不要把它叫做“likes_by”,而是把“user”和相关的名字叫做“likes”,这样你可以做'user.likes.all()'等等。对于'answer'和'question'也是一样的。最后,模型应该总是使用单数,所以'class Vote(models.Model)'而不是“Votes”。 – C14L
感谢提示@ C14L,我会照顾到这一点。我使用了question_id,因为我正在使用django rest框架序列化程序,并且我想将它作为JSON中的键发送给客户端。即{{question_id}:}。当我使用问题时,它被发送为{“question”:},这是令人困惑的。序列化程序中的键与字段名有什么不同? –
是的,有,您应该为DRF中的REST API字段进行“命名”,而不是在数据库级别。 – C14L