2012-11-09 10 views
7

में विदेशी कुंजी तत्वों को कैसे लोड करें मेरे Django मॉडल में, मेरे पास 10 फ़ील्ड हैं और 3 फ़ील्ड विदेशी कुंजी हैं। मेरे जेएसओएन डेटा में जीईटी अनुरोध से प्राप्त किया गया है, मुझे सभी फ़ील्ड मिल रहे हैं लेकिन विदेशी कुंजी नहीं।Tastypie

मैं भी यह किया है, लेकिन मैं अब भी उन क्षेत्रों JSON डेटा में नहीं मिल रहा है:

DataFields = MyData._meta.get_all_field_names() 
class MyResource(ModelResource): 
     class Meta: 
     queryset = MyData.objects.all() 
     resource_name = 'Myres' 
     serializer = Serializer(formats=['json']) 
     filtering = dict(zip(DataFields, [ALL_WITH_RELATIONS for f in DataFields])) 

उदाहरण के लिए, मैं city की तरह मॉडल में क्षेत्र है, लेकिन उस क्षेत्र में उपलब्ध नहीं है जेएसओएन मैं इससे मिलता हूं।

क्या कोई तरीका है कि JSON में मुझे city:city__name स्वचालित रूप से प्राप्त हो सकता है?

मैं ऐसा करते हैं, तो मैं शहर मिलता है, लेकिन मुझे लगता है कि कर सकते हैं परिभाषित करने के बिना:

def dehydrate(self, bundle): 
     bundle.data["city_name"] = bundle.obj.city__name 
     return bundle 

उत्तर

11

आप अपने विदेशी कुंजी क्षेत्रों के लिए related resources बनाना चाहते हैं और उन्हें MyResource में एम्बेड जाएगा। यदि आप एम्बेडेड संसाधन full=True बनाते हैं, तो MyResource लाने पर यह इसे निर्जलित कर देगा, अन्यथा यह इसे संबंधित संसाधन यूरी के रूप में एम्बेड करेगा।

class RelatedResource(ModelResource): 
    class Meta: 
     ... 


class MyResource(ModelResource): 
    related = fields.ForeignKey(RelatedResource, full=True) 

    class Meta: 
     ... 

फिर आप MyResource को GET अनुरोध में ?related__field=value के आधार पर फ़िल्टर कर सकते हैं।


तुम सिर्फ क्षेत्र मॉडल की __unicode__ द्वारा वापस चाहते हैं, तो आप निम्न (बजाय एक संबंधित संसाधन embedding) कर रही कोशिश कर सकते हैं:

class MyResource(ModelResource):  
    city = fields.CharField(attribute="city") 

    class Meta: 
     ... 

"शहर" कहाँ क्षेत्र है MyData मॉडल पर विदेशी कुंजी का नाम।

+0

क्या किसी भी संसाधन को परिभाषित किए बिना ऐसा करने का कोई तरीका है। ओह, मैं djnago में अपने हर मॉडल का संसाधन बनाने के लिए हैव। क्या यह समय बर्बाद नहीं है – user825904

+0

अतिरिक्त संसाधन बनाना आपकी सबसे अच्छी शर्त होगी। आप कम से कम संसाधन बना सकते हैं, उन्हें एपीआई से बाहर रखें (उन्हें अपने यूआरएल में न जोड़ें), और उन्हें 'पूर्ण = सही' के साथ एम्बेड करें। वह अतिरिक्त काम नहीं होगा। अन्यथा, निर्जलीकरण विधि वैकल्पिक है। – Blake

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