2012-04-09 14 views
6

जब Tastypie का उपयोग करके कोई नया आइटम बनाया जाता है, तो मैं इसे किसी उपयोगकर्ता की विशेषता में जोड़ना चाहता हूं जो कई से अधिक फ़ील्ड है। अभी मेरी obj_create इस तरह दिखता है:Tastypie obj_create - नव निर्मित ऑब्जेक्ट का उपयोग कैसे करें?

def obj_create(self, bundle, request=None, **kwargs): 
    return super(GoalResource, self).obj_create(bundle, request, user=request.user) 

मैं नई वस्तु बनाने के लिए चाहते हैं, लेकिन जब मैं request.user की विशेषता goal_list में जोड़ने के लिए सक्षम होना चाहते हैं। लेकिन, मेरे पास जो डेटाबेस है वह तुरंत डेटाबेस में ऑब्जेक्ट बना देगा। मैं ऑब्जेक्ट कैसे बनाऊंगा और फिर इसे उपयोगकर्ता की target_list विशेषता में जोड़ूं?

उत्तर

10

आप हमें अपने संसाधन परिभाषा नहीं दिखा था, लेकिन आप अपने आधार वर्ग के रूप में tastypie.resources.ModelResource उपयोग कर रहे हैं यह सोचते हैं, यह काम करना चाहिए:

def obj_create(self, bundle, request=None, **kwargs): 
    bundle = super(GoalResource, self).obj_create(
     bundle, request, user=request.user) 

    user = request.user 
    user.goals.add(bundle.obj) 
    user.save() 
    return bundle 

इसका कारण यह है ModelResource वर्ग के obj_create विधि एक बंडल जिसमें रिटर्न है सहेजे गए ऑब्जेक्ट (bundle.obj) और आप इस ऑब्जेक्ट को अपने obj_create विधि में दिखाए गए अनुसार दिखा सकते हैं और केवल तभी इसे वापस कर सकते हैं।

मैंने यह भी माना है कि request.user में वैध User ऑब्जेक्ट (यानी प्रमाणित) है, आपको यह सुनिश्चित करना होगा कि यह ऊपर काम करने के लिए करता है या आपको ऐसा करने के लिए कुछ त्रुटि हैंडलिंग कोड जोड़ना चाहिए।

आशा इस मदद करता है :)

5

मैं अभी तक तो मैं सोचा मैं एक दूसरे जवाब डाल टिप्पणी करने के लिए पर्याप्त प्रतिष्ठा नहीं है। उपर्युक्त उत्तर सही है, मैं सिर्फ उस अनुरोध को जोड़ना चाहता था जो अब obj_create कॉल में मौजूद नहीं है। आप bundle.request के माध्यम से वर्तमान अनुरोध पहुँच सकते हैं:

http://django-tastypie.readthedocs.org/en/latest/resources.html#accessing-the-current-request

जवाब ऊपर के लिए धन्यवाद, यह मेरे में की है!

+0

उत्तर के कारण हर जगह उत्तर अपडेट करने की आवश्यकता है :) – teewuane

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