我的url_conf
如下所示,
...appointments/<slug:company>/ ^service_booking/(?P<pk>[^/.]+)/$
公司零件是通过context
在序列化程序中获得的。
如果URL仅具有docs中所述的HyperlinkedIdentityField
kwarg,我本可以创建一个pk
。但是添加了company
字段后,我无法做到这一点。
当前,我正在使用SerializerMethodField
来按以下方式处理此问题:
def get_url(self, obj):
return self.context['request'].build_absolute_uri(
reverse('appointment:service-booking',
kwargs=dict(company=self.context['company'].id,
pk=obj.pk)
)
)
我相信HyperlinkedIdentityField
在实际传递给序列化程序之前将无法访问上下文。
感谢您的帮助。谢谢。
答案 0 :(得分:1)
您必须自定义HyperlinkedIdentityField
才能提供额外的缺点:
class MyHyperlinkedIdentityField(HyperlinkedIdentityField):
def get_url(self, obj, view_name, request, format):
if hasattr(obj, 'pk') and obj.pk in (None, ''):
return None
lookup_value = getattr(obj, self.lookup_field)
kwargs = {
self.lookup_url_kwarg: lookup_value,
'company': self.context['company'].id,
}
return self.reverse(view_name, kwargs=kwargs, request=request, format=format)