假设您在 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)