python - Django/Tastypie - DELETE requests deleting everything -
मेरे पास निम्न मॉडल है
class ओपन (models.Model): name = models .extField () खोली = मॉडल। डेटाटाइमफिल्ड (auto_now_add = true) user = models.ForeignKey (उपयोगकर्ता) और निम्न संसाधन
वर्ग UserResource ( ModelResource): कक्षा मेटा: queryset = User.objects.all () resource_name = 'उपयोगकर्ता' वर्ग ओपनरसॉर्स (मॉडल रीसॉर्स): उपयोगकर्ता = फ़ील्ड। फ़ॉरवर्डकी (यूज़रआरएसओआरएस, 'यूजर') वर्ग मेटा: queryset = Open.objects.all () Resource_name = 'open' मैं कुछ उपयोगकर्ता के open_set से एक ओपन ऑब्जेक्ट को हटाने का प्रयास कर रहा हूं। पोस्ट करने के लिए, मैं निम्न कोड का उपयोग करता हूं (अनुरोधों का उपयोग करके):
content = {"name": file_path, "user": "/ api / v1 / user / 2 /"} अनुरोध पोस्ट (यूआरएल = 'http: // लोकलहोस्ट: 8000 / एपीआई / वी 1 / ओपन /', डेटा = जेसनडेंप्स (सामग्री), हेडर = {'सामग्री-प्रकार': 'एप्लिकेशन / जेसन'},) जो पूरी तरह से कार्य करता है और ठीक वही करता है जो मैं चाहता हूं। हालांकि, हटाने के लिए समान कोड का उपयोग करने की कोशिश करते समय:
content = {"name": file_path, "user": "/ api / v1 / user / 2 /"} requests.delete ( Url = 'http: // localhost: 8000 / api / v1 / open /', डेटा = json.dumps (सामग्री), हेडर = {'content-type': 'application / json'},) < / पूर्व> यह केवल उस ओपन ऑब्जेक्ट को हटाने के बजाय उस उपयोगकर्ता से सभी ओपन ऑब्जेक्ट्स को हटा देता है (इस मामले में, आईडी = 2 वाला उपयोगकर्ता), जिसका नाम "file_path" है और जिसका "उपयोगकर्ता" है / / एपीआई / Vi / user / 2 / "
मुझे क्या याद आ रहा है?
भेद सूची और विवरण के बीच।
निस्संदेह विधियों को दो प्रकारों में विभाजित किया जाता है:
विस्तार (GET, PUT और DELETE के लिए):
/ api / V1 / ऑब्जेक्ट / 1 / और सूची (GET, PUT और DELETE के लिए):
/ api / v1 / ऑब्जेक्ट / पोस्ट और पैच थोड़ा अलग है।
इसका अर्थ है कि DELETE / api / v1 / objects / सभी वस्तुओं को निकाल देगा। एक ऑब्जेक्ट को हटाने के लिए आपको आईडी के साथ पथ प्रदान करना होगा: आप बस जोड़ नहीं सकते हैं
सामग्री को सामग्री और Tastypie द्वारा उठाया जाना चाहते हैं सभी के लिए इसका मतलब नहीं है कि जानकारी Tastypie द्वारा अनदेखा कर दी जाएगी।
यदि आप अपनी सूची को क्वेरीस पैरामीटर का उपयोग करना चाहते हैं:
/ api / v1 / objects /? नाम = Asdfasdf और user = 2 और इन को छानने की अनुमति दें:
से tastypie.constants आयात करें ALL, ALL_WITH_RELATIONS वर्ग ओपन (models.Model): नाम = मॉडल। टेस्टफिल्ड () खोली = मॉडल। डेटाटाइमफिल्ड (auto_now_add = true) user = models.ForeignKey (उपयोगकर्ता) फ़िल्टरिंग = {'name': ALL, 'user': ALL_WITH_RELATIONS} इन परिवर्तनों के बाद आप ऑब्जेक्ट्स सेट को हटाने में सक्षम होंगे:
DELETE / api / v1 / objects /? Name = asdfasdf और user = 5
संपादित करें:
तो आपका कॉल ऐसा दिखेगा:
आयात करें urlib content = {"name": file_path, "user": " / Api / v1 / user / 2 / "} # यदि परिवर्तन नहीं '/ api / v1 / user / 2 /' 2 में काम नहीं करता है तो मुझे इस url = 'http: // localhost: 8000 / api / v1 / खुला /? ' + Urllib.urlencode (content) requests.delete (url = url, डेटा = कोई नहीं, हेडर = {'content-type': 'application / json'},)
Comments
Post a Comment