我有一堂课叫做电影:
class Movie(models.Model):
title = models.CharField(max_length=511)
tmdb_id = models.IntegerField(null=True, blank=True, unique=True)
release = models.DateField(null=True, blank=True)
poster = models.TextField(max_length=500, null=True)
backdrop = models.TextField(max_length=500, null=True, blank=True)
popularity = models.TextField(null=True, blank=True)
还有一个名为Trailer的类:
class Trailer(models.Model):
movie = models.ForeignKey(Movie, on_delete=models.CASCADE)
link = models.CharField(max_length=100)
date = models.DateTimeField(auto_now_add=True)
如何显示预告片日期订购的所有电影?
我尝试过:
Movie.objects.order_by('trailer__date')
但这会导致多个重复,并且也没有按正确的顺序显示它们,如何避免重复,并且按Trailer对象的日期排列的每部电影都有一个条目?编辑:我只是注意到它不显示所有条目,而是仅显示其中一些条目
最佳答案
更新:OP希望按最新的发布日期(而不是最早的发布日期)进行排序。
如果需要,可以在此处使用注释:
from django.db.models import Max
qs = Movie.objects.values('title').annotate(latest_trailer=Max('trailer__date')).order_by('-latest_trailer')
# Add other columns you want into the `values` if you need them
或者,您可以使用原始查询并将其与字典配对。
from collections import OrderedDict
qs = Movie.objects.order_by('-trailer__date')
movies = OrderedDict()
for x in qs:
if x.id not in movies:
movies[x.id] = x
movies = movies.values()
尚不清楚电影有多个预告片时要按什么顺序排列,所以我猜想它是基于最早的预告片。