Django中的ManyToManyField初始化

Django中的ManyToManyField初始化,django,manytomanyfield,Django,Manytomanyfield,我有以下型号: 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

我有以下型号:

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\u text)
。现在的问题是,当我打印
c.vows.exists()
时,它是
True
。此注释c如何在
注释投票表中有一个条目?

生成的“sql”:从“auth_user”中选择(1)作为“a”,在(“auth_user”。“id”=“app_投票”。“user_id”)中选择“app_投票”。“cmt_id”=62限制1”

由于注释的主键是User,因此c.voces.exists()实际上检查用户是否有投票权,而不是检查注释是否有投票权


另外,如果您通过评论uuid而不是pk进行筛选,则可以通过投票查询获得评论投票

在检查投票是否存在之前是否保存了新评论?当django处于调试模型中时,您可以使用from django.db import connection print connection在django shell中看到为exists()调用生成的SQL。查询[-1]