2010-02-21 7 views
12

मैं अपने बालों को यहां खींच रहा हूं क्योंकि यह मेरे लिए काम नहीं कर रहा है और ऐसा लगता है कि यह होना चाहिए।मैं डीजेंगो-पिस्टन को धारावाहिक आउटपुट में संबंधित बाल वस्तुओं को शामिल करने के लिए कैसे बना सकता हूं?

मैं एपीआई विकसित करने के लिए Django-Piston का उपयोग कर रहा हूं और इसमें 2 मॉडल, बिल्डिंग और बिल्डिंग एरिया है।

बिल्डिंग एरिया के निर्माण के लिए एक विदेशीकी है क्योंकि इमारत में कई क्षेत्र हैं। एफके के लिए 'related_name' संपत्ति 'क्षेत्र' है, इसलिए मैं किसी दिए गए भवन से बिल्डिंग एरिया तक पहुंच सकता हूं।

समस्या यह है कि यह व्यवस्थापक में ठीक दिखता है लेकिन जब मैंने /api/building.json एंडपॉइंट पर मारा, तो मुझे जेएसओएन में नेस्टेड बिल्डिंग एरिया ऑब्जेक्ट्स के बिना बिल्डिंग ऑब्जेक्ट मिलता है।

मैंने सोचा होगा कि Django-Piston डिफ़ॉल्ट रूप से रिवर्स एफके फ़ील्ड्स का पालन करेगा या क्या मुझे कुछ याद आ रहा है?

handlers.py

class BuildingHandler(BaseHandler): 

    allowed_methods = ('GET',)  
    model = Building 

    def read(self, name=None): 
     return self.model.objects.all() 

models.py

class Building(models.Model): 
    address   = models.CharField(max_length=255) 

    def __unicode__(self): 
     return self.address 

class BuildingArea(models.Model): 
    display_name = models.CharField(max_length=30) 
    building  = models.ForeignKey(Building, related_name='areas') 

    def __unicode__(self): 
     return self.display_name 

उत्तर

19

ठीक है तो मैंने इसे emitters.py के माध्यम से डीबग करने के बाद अंततः काम किया और यह नोट किया कि यह मॉडल फ़ील्ड को फिर से चलाने के लिए हैंडलर की 'फ़ील्ड' संपत्ति का उपयोग कैसे करता है।

ये मेरी मॉडल हैं:

class BuildingHandler(BaseHandler): 

    allowed_methods = ('GET',)  
    fields = ('address', ('areas', ('display_name',),),)  
    model = Building 

    def read(self, name=None): 
     return self.model.objects.all() 

यहाँ नोट करना महत्वपूर्ण बात यह है कि emmitters.py कुछ सक्रिय कर देंगे:

class Building(models.Model): 
    address   = models.CharField(max_length=255) 

    def __unicode__(self): 
     return self.address 

class BuildingArea(models.Model): 
    display_name = models.CharField(max_length=30) 
    building  = models.ForeignKey(Building, related_name='areas') 

    def __unicode__(self): 
     return self.display_name 

यह मेरा BuildingHandler दिखता है अब की तरह है कोडपैथ केवल तभी जब वर्तमान फ़ील्ड परिभाषा एक सेट या सूची है। मैं खेतों को परिभाषित करने के लिए इस्तेमाल किए गए सेटों में एक पिछला ',' जोड़ना भूल गया था और इससे पिस्टन ने स्ट्रिंग में मौजूद वर्णों के बजाय, 'display_name' स्ट्रिंग में निहित वर्णों से बने सेट को वापस करने के लिए पाइथन का कारण बनने का कारण बना दिया। प्रदर्शित होने वाला नाम'। मुझे उम्मीद है कि अधिक जानकारी के लिए, Google 'पायथन एकल सेट पिछला कॉमा' बनाया गया है।

उम्मीद है कि यह किसी और की मदद करता है! : डी

+0

दस हजार आपको सर (या महोदया) के ऊपर उठाता है। या कम से कम एक। किसी भी तरह से मैं इसे याद किया जाना चाहिए। पिस्टन मुझे आश्चर्यचकित करता है। – winsmith

+0

पागल के रूप में मैंने सोचा था कि यह जवाब था, यह सही है। +1 और जब मैं भूल जाता हूं तो बुकमार्क किया गया। –

+0

अब मुझे बहुत समय बचा है। – julkiewicz

0

BuildingHandler पर, कार्य करें:

fields = ('address', 'areas') 

कि यह करना चाहिए।

+0

ठीक है, मैंने कुछ भरा होगा क्योंकि मैंने सोचा था कि मैंने पहले ही कोशिश की है। मैं कोशिश करूँगा और वापस रिपोर्ट करूंगा। – Ashemah

+0

ठीक है मैंने कोशिश की है और यह अभी भी काम नहीं कर रहा है - आउटपुट है: [{"क्षेत्र": "", "पता": "42 फ्रिगेट क्रिसेंट"}] लेकिन निश्चित रूप से डीबी में बिल्डिंग एरिया है बिल्डिंग को इंगित करने के लिए संबंध सही ढंग से स्थापित किए गए हैं। – Ashemah

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

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