Django OneToMany

paw*_*que 7 django modeling model

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

Order
    def addOrderLine
    def allOrderLines
Run Code Online (Sandbox Code Playgroud)

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

class OrderLine(models.Model):
   order = models.ForeignKey(Order)
Run Code Online (Sandbox Code Playgroud)

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

我可能会使用这个定义并在Order关卡中提供方法.但是,这不起作用,因为如果我在文件中定义Order上面的内容,则看不到OrderLinemodels.pyOrderOrderLines

elo*_*0ka 8

你想要一个ForeignKeyOrderOrderLine.像这样的东西:

from django.db import models

class Order(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)

class OrderLine(models.Model):
    order = models.ForeignKey(Order, related_name='orderlines')
    name = models.CharField(max_length=30)

    def __unicode__(self):
        return self.name

# Create a new order in the DB:
>>> order = Order.objects.create()
# Add a few items to this order:
>>> order.orderlines.create(name='Candied Yams')
<Candied Yams>
>>> order.orderlines.create(name='Minty loin of Lamb')
<Minty loin of Lamb>
# Get all items for this order:
>>> order.orderitems.all()
[<Candied Yams>, <Minty loin of Lamb>]
Run Code Online (Sandbox Code Playgroud)

这是很好的记录行为:)


小智 6

如果我理解正确的这个你要寻找的许多的逆一个即提供了一组所有的访问orderlinesorder.

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

 o = Order.objects.get(id=X)
 lines = o.orderline_set.all()
Run Code Online (Sandbox Code Playgroud)

行现在应该包含整个链接的订单行.它似乎没有被广泛记录,但如果您仔细阅读多对一文档中的示例代码,您将看到此功能一直使用.

笔记:

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