假设您在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
上有{{1}}
django-ordered-model似乎是一个有趣的解决方案,但它假定所有对象的全局顺序。
答案 0 :(得分: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)
因此,您可以执行<{p}}而不是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)