2016-10-01 7 views
1

によって発注I持っている作品と呼ばれるクラス:ジャンゴ - 外部キー

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) 

とクラスという名前のトレーラー:私は日付順すべてのムービーを表示するにはどうすればよい

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')しかし、それは複数の重複を引き起こし、正しい順序でも表示されません。どのように重複を避け、トレーラオブジェクトの日付で注文された映画ごとに1つのエントリがありますか?

編集:私はちょうどそれは、すべてのエントリが表示されないことに気づいたが、ちょうどそのうちのいくつか

答えて

0

は近かったが、私はそれが昇順または降順のためだったかどうか、好きだろうが、私は最終的に彼に基づいて回答を考え出したように動作しませんでした:

from django.db.models import Max 

qs = Movie.objects.annotate(Max("trailer__date")).order_by('-trailer__date__max') 
+0

投票のクローズアップを検討する – c0der

2

更新:OPは最新トレーラー日付順にこれを望んでいた、としませ早いトレーラー日付で。

したい場合は、ここで注釈を使用することができます。

from django.db.models import Min 
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() 

は、あなたが、彼らは複数のトレーラーを持っていたときで映画を望んため不明であったので、私はそれが早いトレーラーに基づいた推測しました。 2PS答え@

+0

最初の昇給私はそれを試してみたときに、映画の重複なしで映画を見せてくれました。正しい順序ではなく、順序は最新の予告編に基づいています。 ** 'odict_values'オブジェクトは添え字ではありません**意味が分かりません – mari

+0

**編集:** Movie.objects.annotate(earliest_trailer = Min( 'trailer__date') ).order_by( 'earliest _trailer')は、すべてのオブジェクトを表示しますが、まだランダムな順序です。 – mari

+0

@mari:スクリプト可能な問題を解決するのに十分なコードがありません。上記の例が更新されました最新の予告編で並べ替える次の時間に元の投稿に必ず指定してください。 – 2ps