クエリセットが正しい順序で返される理由を理解するのに問題があります。記事の著者がリストされており、それらは次のようなManyToManyテーブルに保存されます。articlepage_authors
記事ごとに、返品および表示される順序を選択できる必要があります。
たとえば、ID 44918の記事には、著者13752( 'Lee Bodding')と13751( 'Mark Lee')があります。
私はこれらをシェルで呼び出しました:
Out[6]: <QuerySet [<User: Mark Lee ([email protected])>, <User: Lee Bodding ([email protected])>]>
postgresでこれを呼び出す: SELECT * FROM articlepage_authors;
は、ユーザーLee Bodding
id=13752
が最初にテーブルに格納されていることを示しています。
id | articlepage_id | user_id
-----+----------------+---------
1 | 44508 | 7781
2 | 44508 | 7775
3 | 44514 | 17240
….
465 | 44916 | 17171
468 | 44918 | 13752
469 | 44918 | 13751
著者の削除、「Lee Bodding」の追加、記事の保存、「Mark Lee」の追加、またはその逆など、何をしようとしても、最初に「MarkLee」を返すクエリセットしか取得できません。
これをデバッグする他の方法がわかりません。
1つの解決策は、作成者の順序を定義する別のフィールドを追加することですが、最初にここで何が起こっているのかを理解したいと思います。何かがすでに順序を定義しているようです、そしてそれを管理する方が良いでしょう。
クエリセットにを追加しorder_by
て、レコードを希望の順序で表示することができます。警告:クエリの最適化では、データベースによってはパフォーマンス上の理由から、そのフィールドにインデックスを作成する必要がある場合があります。
デフォルトでは、aによって返される結果は、モデルののオプションで
QuerySet
指定された順序タプルによって順序付けられordering
ますMeta
。このメソッドQuerySet
を使用して、これを個別にオーバーライドできますorder_by
。例:
Entry.objects.filter(pub_date__year=2005).order_by('-pub_date', 'headline')
上記の結果は、
pub_date
降順、headline
昇順の順に並べられます。の前の負の記号"-pub_date"
は降順を示します。昇順が暗示されます。
あなたはそれを多対多IDで注文するエクストラとペアにします:
.extra(select={
'creation_seq': 'articlepage_authors.id'
}).order_by("creation_seq")
django> 1.10を使用している場合は、extra
:なしでフィールドを直接使用できます。
.order_by('articlepage_authors.id')
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加