Получение objects.all () reverse () или в порядке убывания - PullRequest
3 голосов
/ 20 февраля 2012

В Django вызов object.manytomany.all().reverse() и его шаблонный эквивалент object.manytomany.all.reverse, похоже, не работают для отношений «многие ко многим».

Как отменить список результатовотношение многих ко многим?

1 Ответ

2 голосов
/ 20 февраля 2012

Возможно, вы ошиблись или, возможно, я неправильно понял ваш фрагмент кода. Допустим, у вас есть модель книги, в которой экземпляр книги может иметь несколько авторов.

class Author(models.Model):
  ...

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

Теперь это вернет QuerySet всех экземпляров Книги - Book.objects.all()

objects является менеджером по умолчанию для Модели, и это множественное число. object - это отдельная вещь в Python, и лучше не использовать ее как собственную переменную. Стоит также отметить, что «множество» не является ни полем, ни функцией в Django. Дайте нам знать, если это то, что вы определили. Таким образом, чтобы получить несколько авторов ManyToMany, экземпляр книги может иметь:

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

Теперь, когда у вас есть авторы, и эти авторы представлены в форме QuerySet, вы можете выполнять любые обычные манипуляции с QuerySet, включая обращение вспять.

book.authors.all().reverse()

Помните, что отмена чего-то не упорядоченного ничего не значит, поэтому вы можете рассмотреть возможность использования objects.order_by("<field name>").reverse(). Надеюсь, это поможет.

...