我有一堂课叫做电影:

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()


尚不清楚电影有多个预告片时要按什么顺序排列,所以我猜想它是基于最早的预告片。

08-25 04:31