2010-12-30 8 views
7

मैं django में एक छोटा ई-शॉप एप्लिकेशन लागू कर रहा हूं। मेरा प्रश्न चिंताओं कई अवधियाँ साथ एक आदेश मॉडलिंग: अवधियाँ आदेश से सीधे पहुँचा जा के साथ अवधियाँ रिश्ते के लिए आदेश, यानी मॉडल करने के लिए कैसेDjango OneToMany

Order 
    def addOrderLine 
    def allOrderLines 

मैं आदेश से अवधियाँ पहुँच सकते हैं और करने की जरूरत नहीं करना चाहते हैं उन्हें सीधे डीबी से प्राप्त करें। Django ForeignKeys परिभाषित करने के लिए संभावना प्रदान करता है, लेकिन यह मेरी समस्या का समाधान नहीं होता है, क्योंकि मैं निम्नलिखित को परिभाषित करना होगा:

class OrderLine(models.Model): 
    order = models.ForeignKey(Order) 
इस परिभाषा के साथ

मैं db से सीधे अवधियाँ लाने के लिए होगा और आदेश के माध्यम से नहीं।

मैं इस परिभाषा का उपयोग कर सकता हूं और Order स्तर पर विधियां प्रदान कर सकता हूं। यह, हालांकि, क्योंकि काम नहीं करता है अगर मैं Ordermodels.py फ़ाइल में OrderLine ऊपर परिभाषित करते हैं, Order नहीं देखता OrderLines

उत्तर

6

आप के लिए कई का प्रतिलोम लिए देख रहे हैं मैं इस सही ढंग से समझ एक यानी एक एक्सेसर जो आपको orderlines प्रति order का सेट प्रदान करता है।

सौभाग्य से, एक से एक लिंक बनाने का कार्य यह आपके लिए करता है। इसे आज़माएं:

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

लाइनों में अब लिंक किए गए ऑर्डर लाइनों का पूरा सेट होना चाहिए। यह व्यापक रूप से प्रलेखित नहीं प्रतीत होता है, लेकिन यदि आप many-to-one documentation में उदाहरण कोड पढ़ते हैं, तो आप इस कार्यक्षमता को हर समय इस्तेमाल करेंगे।

नोट्स:

  • लोअर केस orderline है जानबूझकर, यह हमेशा कम मामला है।
+0

बहुत बहुत शुक्रिया इस पूरी तरह से मेरे सवाल का जवाब है! – paweloque

8

आप OrderLine से Order करने के लिए एक ForeignKey चाहते हैं। कुछ इस तरह:

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 व्यवहार :)

संबंधित मुद्दे