使用过滤器的Django查询

使用过滤器的Django查询,django,django-models,Django,Django Models,我在django有3种型号: class Movie(models.Model): mid = models.IntegerField(primary_key = True) name = models.CharField(max_length = 100) class User(models.Model): username = models.CharField(max_length=128, null=True) uid = models.CharField

我在django有3种型号:

class Movie(models.Model):
    mid = models.IntegerField(primary_key = True)
    name = models.CharField(max_length = 100)

class User(models.Model):
    username = models.CharField(max_length=128, null=True)
    uid = models.CharField(max_length=100)
    movie = models.ManyToManyField(Movie, through = "Vote")

class Vote(models.Model):
    movie = models.ForeignKey(Movie)
    user = models.ForeignKey(User)
    rating = models.IntegerField()
这里评级=0/1,0表示不喜欢,1表示喜欢 我想使用过滤器进行一些查询:

  • 找出当前用户喜欢的所有电影。为此,我使用以下两个查询,但它们都不起作用。在这两种情况下,它都给出了错误的结果

    ans=Movie.objects.filter(投票用户=self)。filter(投票评分=1)

    ans=Movie.objects.filter(用户uid=self.uid)。filter(投票率=1)

  • 我有一个数组ids中的用户列表。我想知道这个列表中有多少用户喜欢某部电影? 我试过了,但这也不正确:

    ret=User.objects.filter(uid\uu in=ids).filter(vote\uu movie=mov).filter(vote\uu rating=1)


  • 有人能帮我处理这两个查询吗?

    我还建议让django分配模型的id,但如果您使用的是旧数据库或出于其他原因需要分配id,您可以这样查询:

  • 用户列表中喜欢特定电影的人数:

    >>> uids = ['1','2','3']
    >>> # if mov is a Movie instance
    >>> votes = Vote.objects.filter(user__uid__in=uids, movie=mov, rating=1)
    >>> print votes.query
    SELECT "so1_vote"."id", "so1_vote"."movie_id", "so1_vote"."user_id", "so1_vote"."rating" FROM "so1_vote" INNER JOIN "so1_user" ON ("so1_vote"."user_id" = "so1_user"."id") WHERE ("so1_user"."uid" IN (1, 2, 3) AND "so1_vote"."movie_id" = 1  AND "so1_vote"."rating" = 1 )
    >>> # if mov is a mid for a movie
    >>> # get movie instance by using Movie.objects.get(mid=mov)
    >>> # or query:
    >>> # votes = Vote.objects.filter(user__uid__in=uids, movie__mid=mov, rating=1)
    >>> likes_count = votes.count()
    >>> print likes_count
    0
    
    合并:

    likes_count = Votes.objects.filter(user__uid__in=uids, movie=mov, rating=1).count()
    
  • 在#1中,什么是自我?你能展示一下整个方法吗?当你这样做的时候,你得到了什么东西?
    >>> uids = ['1','2','3']
    >>> # if mov is a Movie instance
    >>> votes = Vote.objects.filter(user__uid__in=uids, movie=mov, rating=1)
    >>> print votes.query
    SELECT "so1_vote"."id", "so1_vote"."movie_id", "so1_vote"."user_id", "so1_vote"."rating" FROM "so1_vote" INNER JOIN "so1_user" ON ("so1_vote"."user_id" = "so1_user"."id") WHERE ("so1_user"."uid" IN (1, 2, 3) AND "so1_vote"."movie_id" = 1  AND "so1_vote"."rating" = 1 )
    >>> # if mov is a mid for a movie
    >>> # get movie instance by using Movie.objects.get(mid=mov)
    >>> # or query:
    >>> # votes = Vote.objects.filter(user__uid__in=uids, movie__mid=mov, rating=1)
    >>> likes_count = votes.count()
    >>> print likes_count
    0
    
    likes_count = Votes.objects.filter(user__uid__in=uids, movie=mov, rating=1).count()