मैं जो भी करने की कोशिश कर रहा हूं उसके लिए मैं सही समाधान तैयार करने के लिए संघर्ष कर रहा हूं और वास्तव में कुछ मदद की सराहना करता हूं।Django: get_object_or_404 सही समाधान नहीं है, लेकिन क्या है?
फिलहाल, मेरे पास एक कार्य प्रणाली है जो डीबी से "विशेष" लेती है और इसे ब्राउज़र में प्रदर्शित करती है। उपयोगकर्ता ब्राउज़र में "विशेष" को संपादित करने और इसे डीबी में सबमिट करने में सक्षम है। उस परिवर्तन को तब उपयोगकर्ता को दिखाया जाता है।
समस्या यह है कि डीबी में कोई पूर्व-मौजूदा "विशेष" नहीं होने पर "विशेष" अपडेट नहीं होगा। मेरी views.py में मेरे पास है:
def changeSpecialOffer(theRequest):
myProductUuid = theRequest.POST['myProductUuid']
myNewSpecialOffer = theRequest.POST['myNewSpecialOffer']
myProduct = get_object_or_404(Product, uuid=myProductUuid)
myActiveSpecial = get_object_or_404(SpecialOffer.objects.filter(product=myProduct).filter(
active=True))
try:
myActiveSpecial.special = myNewSpecialOffer
myActiveSpecial.save()
except:
return HttpResponse(myActiveSpecial, mimetype='text/plain')
myActiveSpecial = SpecialOffer.objects.filter(product=myProduct).filter(
active=True)
return HttpResponse(myActiveSpecial, mimetype='text/plain')
मुझे पता है कि कारण "विशेष" को अद्यतन करने के काम नहीं करता है क्योंकि वहां कोई पहले से मौजूद "विशेष" है, क्योंकि get_object_or_404
सही ढंग से एक 404 त्रुटि लौटा रहा है डीबी में
मैं इस समस्या को हल किए बिना इस समस्या को हल करने के लिए कुछ समय के लिए प्रयास कर रहा हूं जहां डीबी में मौजूदा "विशेष" है।
अब तक, मैं try
और except
साथ get_object_or_404
की जगह की कोशिश की है, लेकिन मैं तो इस तरह 'unicode' has no attribute 'save()'
के रूप में बचाने के समारोह के साथ समस्याओं, में चलाने। की जगह
ठीक है, तो अब मेरे पास है: 'myActiveSpecial = SpecialOffer.objects।फिल्टर (उत्पाद = MyProduct) .filter ( सक्रिय = सच) वापसी HttpResponse (myActiveSpecial, माइम प्रकार = 'पाठ/सादे') ' लेकिन यह हलकों – Erve1879
में गोल जाने के लिए आप अधिक विशिष्ट हो सकता है लगता है, क्या हो जाता है" सर्किल में गोल "वास्तव में मतलब है? साथ ही, मुझे ऐसा लगता है कि आपको 'myActiveSpecial' को फिर से लाने की आवश्यकता नहीं है। – frnhr
क्षमा करें - बहुत वर्णनात्मक नहीं! असल में, जेएस फ़ंक्शन विशेष रूप से नए मान को सही रूप से बदलने के लिए कार्य करता है, लेकिन नया मान डीबी में सहेजता नहीं है। पृष्ठ को पुनः लोड करने के बाद, पुराना विशेष दिखाया गया है। यदि आप फिर से विशेष अपडेट करने का प्रयास करते हैं, तो ऐसा लगता है कि पुराने विशेष को नए में जोड़ना है ... लेकिन फिर भी बचा नहीं है। – Erve1879