में serializer.data ओवरराइड मैं Django REST Framework के व्यवस्थापक पैनल के किसी फॉर्म फ़ील्ड के मान को बदलने की कोशिश कर रहा हूं और किसी कारण से परिवर्तन कभी नहीं होता है। मैंDjango रीस्ट फ्रेमवर्क
class SomeView(ModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
# I Want to override this and change the POST data
def perform_create(self, serializer):
user = self.request.user.id
# this was a form field where I manually entered the user ID
# I now want it to default to the logged in user
serializer.data['user'] = user
# This returns the original user that was entered into the form field
print serializer.data
नीचे serializer मैं dir()
साथ serializer.data की जाँच की और यह सिर्फ एक अजगर शब्दकोश है तो मैं समझ नहीं क्यों मैं मूल्य को संशोधित नहीं कर सकते हैं। एक परीक्षण के रूप मैं अतिरिक्त मान जोड़ने के लिए कोशिश की, लेकिन है कि या तो
# this doesnt work
serializer.data['some_new_field'] = 'test'
संपादित
काम नहीं करता है एक और नोट पर, मैं डेटा कॉपी कर सकते हैं और संपादित यह
fake_data = serializer.data.copy()
fake_data['old_value'] = 'new value'
हालांकि यह हमेशा मान्य करने के लिए विफल रहता है
serializer = MyModelSerializer(data=fake_data)
serializer.is_valid() # returns false
संपादित:
ठीक है, इसलिए Django द्वारा SimpleLazyObject लौटने की वजह से सत्यापन त्रुटि उत्पन्न हुई थी। जब मैं डेटा पर प्रतिलिपि करता हूं तो सबकुछ अब काम करता है, लेकिन मैं वास्तव में उत्सुक हूं कि मैं इसे कॉपी किए बिना serializer.data
संपादित क्यों नहीं कर सकता। समस्या अब हल हो गई है, लेकिन अगर कोई भी जिज्ञासा के लिए इस मुद्दे पर अंतर्दृष्टि प्रदान कर सकता है, तो यह बहुत ही अच्छा होगा।