我一直在試圖改變表單字段的值Django REST框架的管理面板,並且出於某種原因,更改從未發生。下面我有在Django REST框架中覆蓋serializer.data
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.data與dir()
,它只是一個Python字典,所以我想不通爲什麼我不能修改這個值。作爲測試我試圖增加額外的價值,但不工作,要麼
# 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引起的。當我對數據執行拷貝時,現在一切正常,但我真的很好奇爲什麼我不能直接編輯0而沒有拷貝它。這個問題現在已經解決了,但如果任何人都能爲了好奇而提供關於這個問題的見解,那就太棒了。