在Django中,调用object.manytomany.all().reverse()
及其等效的模板object.manytomany.all.reverse
似乎不适用于多对多关系。
如何撤消多对多关系的结果列表?
答案 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())