7

假设您在 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在我的列表中排在第一位,而您在 index 中拥有它4

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

4

1 回答 1

14

您可以使用中间表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)
于 2013-11-11T08:43:31.870 回答