2010-12-30 6 views
7

私はdjangoで小さなe-shopアプリケーションを実装しています。 私の質問の懸念多くの注文ラインで注文をモデル化:オーダーから直接アクセス注文ラインでの注文ライン関係に注文をモデル化する方法 、すなわちDjango OneToMany

Order 
    def addOrderLine 
    def allOrderLines 

私は注文から注文ラインにアクセスし、する必要はありませんしたいですdbから直接取得してください。 DjangoはのForeignKeyを定義する可能性を提供していますが、私は次のように定義する必要があると思いますので、これは、私の問題を解決しない:

class OrderLine(models.Model): 
    order = models.ForeignKey(Order) 
この定義に

私がDBから直接注文ラインをフェッチする必要があると思いますし、秩序を通じてではない。

私はこの定義を使用して、Orderレベルのメソッドを提供しています。私はmodels.pyファイル内OrderLine上記Orderを定義する場合、これは、しかし、Orderは私がこれを正しく理解していれば、あなたは多くの逆数に探しているOrderLines

答えて

6

を見ていない、ために動作しません。つまりorderlines/orderのすべてのセットを提供するアクセッサです。

幸いにも、多対1のリンクを作成する行為があなたのために行います。これを試してみてください:

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

ラインには、リンクされたオーダーラインのセット全体が含まれているはずです。広く文書化されているようではありませんが、many-to-one documentationのサンプルコードをよく読んだ場合は、この機能が常に使用されています。

注:

  • 小文字orderlineそれは常に小文字、意図的です。
+0

おかげで、これは完全に私の質問に答えるたくさんあります! – paweloque

8

ForeignKeyOrderからOrderLineに変更します。このような何か:

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>] 

これはpretty well documented行動:)