2015-05-14 68 views
0

我有以下型号:ManyToManyField初始化在Django

class Comment(models.Model): 
    uuid = models.CharField(max_length=40, default='random') 
    news = models.ForeignKey('News') 
    user = models.OneToOneField(User, primary_key=True) # ForeignKey('User') 
    text = models.CharField(max_length=300, null=True) 
    upvotes = models.PositiveIntegerField(default=0) 
    downvotes = models.PositiveIntegerField(default=0) 
    votes = models.ManyToManyField(User, through='Vote', related_name='votes_table') 


class Vote(models.Model): 
    cmt = models.ForeignKey(Comment) 
    user = models.ForeignKey(User) 
    vote_type = models.SmallIntegerField(default=0) # vote_type is +1 for upvote & -1 for downvote 

当用户提交一个新的评论,我初始化一个新的,像这样的:c = Comment(uuid=uuid.uuid4(),news=n, user=request.user, text=comment_text)。现在的问题是,当我打印c.votes.exists()时,它是True。这条评论如何在comments_votes表中有条目?

+0

您是否在保存新评论前检查票是否存在? 当django处于DEBUG模型中时,您可以使用django.db中的 导入连接 print connection.queries [-1],您可以在django shell中看到生成的用于exists() –

回答

0

生成的'sql':u'SELECT(1)AS“a”FROM“auth_user”INNER JOIN“app_vote”ON(“auth_user”。“id”=“app_vote”。“user_id”)WHERE“app_vote “。”cmt_id“= 62 LIMIT 1'

作为Comment的主键是User,c.votes.exists()实际上会检查用户是否有任何投票,而不是检查评论是否有投票。

P.S.您可以通过评论uuid而不是pk来评论您的评论票。