2015-05-14 75 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來評論您的評論票。