Django 如何使用 ManyRelatedManager
我有两个应用程序,它们是独立的,没有特别的理由需要互相交流。这意味着我不想在任何一个应用中导入另一个的名称。所有的工作都应该在一个“粘合”应用中完成。
我想写一个“粘合”应用,它可以通过一个多对多的字段来连接特定的模型,比如:
在客户应用中,
class Customer(models.Model):
...
在比萨应用中,
class Pizza(models.Model):
...
然后我想写一个卖比萨的应用,内容大致是这样的:
class PizzaSold(models.Model):
customer = models.ForeignKey(related_name='pizzas')
pizza = models.ForeignKey(related_name='customers')
objects = ManyRelatedManager()
这样我就可以直接从客户那里访问比萨
pizza = Pizza.objects.all()[0]
for customer in pizza.customers:
#Do something cool
并且在这个新应用中从比萨访问客户。
我该怎么做呢?
1 个回答
4
如果你在客户模型中使用了 ManyToManyField 来表示客户购买的比萨饼,那会怎么样呢?
class Customer(models.Model):
pizzas_bought = models.ManyToManyField(Pizza)
另外,如果你想在客户和比萨饼之间的关系中添加额外的数据,可以用 through 参数 来指定一个映射类:
class Customer(models.Model):
pizzas_bought = models.ManyToManyField(Pizza, through=PizzaSold)
class PizzaSold(models.Model):
customer = models.ForeignKey(Customer)
pizza = models.ForeignKey(Pizza)
同样,使用 related_name
也可以很好地与 ManyToManyFields
一起使用。例如:
class Customer(models.Model):
pizzas_bought = models.ManyToManyField(related_name='pizzas')