我在定制manytomanyfield时遇到问题,是否可以重新排序所选的值/数据?例如:
class Author(models.Model):
author_name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ManyToManyField(Author)
让我们说作者模型具有Jk罗琳,成龙,李小龙,查克诺里斯的价值观。订购将基于ID吗?如果首先选择哪一个,我可以像我想要的那样自定义它吗?另外,当我自定义它时,它不会影响其他书籍。就像我有HP的书,我的作者订购的将是李小龙,查克诺里斯,Jk罗琳和成龙。然后,Django书将由作者订购,成龙,李小龙,查克诺里斯和Jk罗琳。
每本书都有自己的订购。它不会是全球性的。一旦您更改了第一本书的订购,第二本书将不会受到更改的矿石的影响。我希望有人可以帮助我。感谢。
答案 0 :(得分:0)
您可以使用Meta ordering。例如
class Author(models.Model):
author_name = models.CharField(max_length=100)
class Meta:
ordering = ['author_name']
或查询集order_by以获取特定查询:
Author.objects.all().oreder_by('author_name')
要执行下面的equinoxel建议,您需要添加一个用于排序的字段,以及一个尊重它的方法:
class Book(models.Model):
# ...
authors_order = models.CharField(max_length=255)
def get_ordered_authors(self):
authors = self.authors.all()
authors_by_id = [dict(author.id, author) for author in authors]
for author_id in map(int, self.authors_order.split(",")):
yield authors_by_id[author_id]
每当更改/设置排序时,您还需要实现使book.authors
和book.authors_order
保持同步的逻辑。