是否可以在ManyToMany关系中为对象分配索引?如果我有这些模型:
class Group(models.Model):
items = models.ManyToManyField(GroupItem, unique=False, through=GroupItem)
class GroupItem(models.Model):
group = models.ForeignKey(Group, unique=False)
index = models.IntegerField()
当我创建一个组项时,我希望能够按索引对该项进行排序。所以,如果我有一个小组:
MyGroup = [MyItem1, MyItem2, MyItem3]
但我希望MyItem3
成为第一个这样的项目:
MyGroup = [MyItem3, MyItem1, MyItem2]
我该怎么做?如果我可以让索引自动增加,因为更多对象被添加到Group
答案 0 :(得分:1)
您可以通过使用适当的默认可调用来实现此目的:
class Group(models.Model):
items = models.ManyToManyField(Track, through="GroupItem")
class Track(models.Model):
pass
class GroupItem(models.Model):
group = models.ForeignKey(Group)
track = models.ForeignKey(Track)
index = models.PositiveSmallIntegerField(default=get_index)
def get_index():
latest = GroupItem.objects.aggregate(models.Max("index"))
latest_index = latest["index__max"]
# using 0-based indexing, for example
return latest_index + 1 if latest_index is not None else 0