Django OneToMany

时间:2010-12-30 13:34:02

标签: django model modeling

我正在django实施一个小型电子商店应用程序。 我的问题涉及使用许多OrderLines建模订单: 如何使用直接从订单访问的OrderLines建模Order to OrderLines关系,即

Order
    def addOrderLine
    def allOrderLines

我想从订单访问OrderLines而不必直接从db获取它们。 Django提供了定义ForeignKeys的可能性,但这并不能解决我的问题,因为我必须定义以下内容:

class OrderLine(models.Model):
   order = models.ForeignKey(Order)

有了这个定义,我必须直接从db获取OrderLines而不是通过Order。

我可能会使用此定义并在Order级别提供方法。但是,这不起作用,因为如果我在Order文件中的OrderLine上方定义models.py,则Order看不到OrderLines

2 个答案:

答案 0 :(得分:8)

您希望来自ForeignKey的{​​{1}}到Order。像这样:

OrderLine

这是pretty well documented行为:)

答案 1 :(得分:6)

如果我理解正确的话,那么你正在寻找多对一的反转,即一个访问者,它为你提供一组orderlinesorder个。{/ p>

幸运的是,创建多对一链接的行为可以帮到您。试试这个:

 o = Order.objects.get(id=X)
 lines = o.orderline_set.all()

行现在应该包含整组链接的订单行。它似乎没有被广泛记录,但如果您仔细阅读many-to-one documentation中的示例代码,您将始终看到此功能。

注意:

  • 小写orderline是故意的,它总是小写的。