获取objects.all()reverse()或降序

时间:2012-02-20 02:56:54

标签: django django-templates many-to-many manytomanyfield django-orm

在Django中,调用object.manytomany.all().reverse()及其等效的模板object.manytomany.all.reverse似乎不适用于多对多关系。

如何撤消多对多关系的结果列表?

4 个答案:

答案 0 :(得分:2)

你可能会犯这个错误,或者我误解了你的代码片段。假设您有一个书籍模型,其中书籍的实例可以有多个作者。

class Author(models.Model):
  ...

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

现在,这将返回所有图书实例的QuerySet - Book.objects.all()

objects是模型的默认管理器,它是复数。 object在Python中是它自己的东西,最好不要将它用作你自己的变量。值得一提的是,“manytomany”不是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()。希望有所帮助。

答案 1 :(得分:0)

这可用于根据对象的属性按我们想要的顺序对对象进行排序。

Doubt.objects.all().order_by('-date_posted')

答案 2 :(得分:0)

所以你可以这样做

object.manytomany.order_by("-id")

答案 3 :(得分:-2)

book = reversed(Book.objects.all())