1

Dans Django, l'appel object.manytomany.all().reverse() et son équivalent de modèle, object.manytomany.all.reverse, ne semblent pas fonctionner pour les relations plusieurs-à-plusieurs. Comment inverser une liste de résultats d'une relation plusieurs-plusieurs?Obtention objects.all() reverse() ou décroissant

Comment inverser une liste de résultats d'une relation plusieurs-à-plusieurs?

Répondre

1

Vous vous trompez peut-être ou je me méprends peut-être sur votre extrait de code. Supposons que vous ayez un modèle de livre dans lequel une instance d'un livre peut avoir plusieurs auteurs.

class Author(models.Model): 
    ... 

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

Maintenant, cela renvoie une QuerySet de toutes les instances Livre - Book.objects.all()

objects est le gestionnaire par défaut pour un modèle et il est pluriel. object est son propre truc en Python et il vaut mieux ne pas l'utiliser comme votre propre variable. Il est également intéressant de noter que "manytomany" n'est pas un champ ou une fonction dans Django. Dites-nous si c'est quelque chose que vous avez défini. Donc, pour obtenir les multiples auteurs d'une instance de livre ManyToMany pourrait avoir:

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 

Maintenant que vous avez les auteurs et les auteurs sont sous la forme d'un QuerySet, vous pouvez faire toute manipulation queryset normale, y compris la marche arrière.

book.authors.all().reverse() 

Rappelez-vous que renverser quelque chose qui ne commande ne signifie pas beaucoup que vous voudrez peut-être envisager d'utiliser objects.order_by("<field name>").reverse(). J'espère que cela pourra aider.

+0

Au lieu de objects.order_by (" ") .reverse() vous pouvez utiliser objects.order_by (" - ") pour ordre décroissant. –

+0

Vous pouvez créer une méthode pour appeler facilement ce jeu de requête depuis le modèle. C'est à dire. object.get_m2m_reversed, qui appelle self.manytomany.all(). order_by ('- somefield') – ilvar