【发布时间】:2015-10-18 22:25:02
【问题描述】:
我有一个HyperlinkedModelSerializer。要正确实现其validate 方法,我需要访问正在验证的对象的主键 或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
从序列化程序的 validate 方法中访问正在验证的对象的 ID/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
【问题讨论】:
标签: django django-views django-rest-framework