假设您在 Django 模型中有一个多对多关系,例如:

class GroceryList(models.Model):
    items = models.ManyToManyField(GroceryItem, related_name='in_lists')

class GroceryItem(models.Model):
    name = models.CharField(unique=True)

你和我都可以在两个不同的列表中拥有相同的项目,例如 Avocado ,它们将指向同一个 Avocado 对象。

为每个列表中的项目实现任意 顺序 的最佳方法是什么,可以为每个列表单独编辑? (即我的列表中首先有 Avocado ,而您在索引 4 中有它)

django-ordered-model 似乎是一个有趣的解决方案,但它假定所有对象的全局顺序。

最佳答案

您可以使用 through 使用中间表并在该表中添加有序字段。

class GroceryList(models.Model):
    items = models.ManyToManyField(GroceryItem, related_name='in_lists',
            through='Order')

class GroceryItem(models.Model):
    name = models.CharField(unique=True)

class Order(models.Model):
    number = models.PositiveIntegerField()
    gl = models.ForeignKey(GroceryList)
    gi = models.ForeignKey(GroceryItem)

所以,而不是做 grocerylist.items.add(groceryitem) 你可以做
#for groceryitem1 as 1st item in grocerylist1
Order.objects.create(gl=grocerylist1, gi=groceryitem1, number=1)

#for groceryitem1 as 10th item in grocerylist2
Order.objects.create(gl=grocerylist2, gi=groceryitem1, number=10)

10-08 19:13