使用过滤器的Django查询
我在django有3种型号:使用过滤器的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
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)
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()
>>> 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()