django distinct()和order_by()extra()一起使用

时间:2015-01-20 00:13:13

标签: python django

我使用django restframwork

当链接到127.0.0.1/movie/?top=1

时,这是views.py中的一个函数

我想在1个月内查看仍在剧院和放映的电影 但有时结果会重复,
请帮我检查一下我的查询为什么会这样?

def top(self):
    past_month.date() = '2014-12-20'
    today.date()      = '2015-01-20'
    self.queryset = Movie.objects.filter(releaseday__gte=past_month.date(),releaseday__lte=today.date(),movie__showtime__gte=today).extra({'vrank': 'CASE WHEN hot=0 THEN 21 WHEN hot >=10 THEN 21 ELSE hot END'}).order_by('vrank','-releaseday').distinct()

这是我的模特:

class Movie(models.Model):
    title           = models.CharField(max_length=255, blank=True)
    releaseday      = models.DateField( null=True,blank=True)           

class MovieShowtime(models.Model):
    movie           = models.ForeignKey( Movie, null=True,blank=True,related_name = 'movie' )
    movietime       = models.DateTimeField(null=True,blank=True)     

1 个答案:

答案 0 :(得分:1)

可能是您的查询返回不同的行,但某些行之间的差异仅在您不打算查看的列中(例如,相关表中的字段)。

为了确保您的查询为您关注的列返回不同的值,请在不同之前使用.values([' col1',' col2' ...]) )。

另外,请务必在此处的文档中查看有关不包含在值()https://docs.djangoproject.com/en/1.7/ref/models/querysets/#distinct

中的列的排序的说明