1

Djangoでは、object.manytomany.all().reverse()とそのテンプレートに相当するobject.manytomany.all.reverseを呼び出しても、多対多の関係では機能しないようです。objects.all()reverse()または降順を取得する

多対多リレーションシップの結果のリストを逆にするにはどうすればよいですか?

答えて

1

これは間違っているか、あなたのコードスニペットを誤解している可能性があります。 Bookのインスタンスが複数の著者を持つことができるBook Modelがあるとします。

class Author(models.Model): 
    ... 

class Book(models.Model): 
    authors = models.ManyToManyField(Author) 

さて、これは、すべてのブックインスタンスのQuerySetを返します - Book.objects.all()

objectsはモデルのデフォルトのマネージャであり、それは、複数のです。 objectはPythonでは独自のものであり、独自の変数として使用しないことをお勧めします。 "manytomany"はDjangoのフィールドや関数ではありません。それがあなたが定義したものかどうか私たちに知らせてください。だから、多対多複数の著者に本のインスタンスを取得する必要があります:

book = Book.objects.all()[0] 
type(book.authors) # tells you this is a ManyRelatedManager 
type(book.authors.all()) # tells you this is a QuerySet 
book.authors.all() # will print out the authors for this book 

を今、あなたは著者を持っており、それらの著者は、クエリセットの形態であることを、あなたは反転を含む任意の通常のクエリセットの操作を行うことができます。

book.authors.all().reverse() 

あなたがobjects.order_by("<field name>").reverse()を使用して検討する必要がありますので、注文されていない何かを逆転することはあまり意味がないことに注意してください。希望が役立ちます。代わりに objects.order_byの

+0

( " ").reverse() あなたが objects.order_byを使用することができます(" - ")降順ため 。 –

+0

テンプレートからこのクエリーセットを簡単に呼び出す方法を作ることができます。私。 object.get_m2m_reversedは、self.manytomany.all()を呼び出します。order_by( ' - somefield') – ilvar

関連する問題