我有一個HyperlinkedModelSerializer
。爲了正確實施它的validate
方法,我需要訪問主鍵或正在驗證的對象的URL - 如果它有一個,即它是編輯,則不會創建。這樣做的正確方法是什麼?Django REST框架:在驗證過程中獲取ID/URL?
我試過很多東西,但只是工作的方法是,取對象的ID時,串行實例化爲它的id
領域的黑客:
class BoxSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Box
fields = ('id', 'name', 'url')
def __init__(self, *args, **kwargs):
super(BoxSerializer, self).__init__(*args, **kwargs)
self.id = None \
if len(args) != 1 or not isinstance(args[0], Box) \
else args[0].id
def validate(self, data):
print(data)
return data
什麼是訪問ID的正確方法/序列化程序的validate
方法中正在驗證的對象的URL? data['id']
和data['url']
都不存在。
urls.py
:
urlpatterns = [
url(r'(?P<pk>[0-9]+)/$', views.BoxDetail.as_view(), name='box-detail'),
]
views.py
:
class BoxDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Box.objects.all()
serializer_class = BoxSerializer
出於好奇:你從哪裏知道?文檔是否說這個*任何地方*?我可以發誓我讀了整個文檔*兩次*尋找這個。 – theV0ID
我遇到了類似的問題,然後必須查看DRF的源代碼,以瞭解對象是否被設置爲串行器的變量。此外,DRF序列化程序文檔中還略微提及了這一點。我已經使用該頁面鏈接更新了ans。我認爲檢查DRF的源代碼以及文檔有助於改進。 :) –
謝謝!看起來我要學習閱讀。 – theV0ID