让我们采用Customer
对Order
对模型。
我们怎样才能使HyperlinkedModelSerializer
Order
url
字段与/customers/<customer_pk>/orders/<order_id>/
这样的网址相反?
我想过使用lookup_field
类中的Meta
,但它似乎只接受一个字段。
感谢您的帮助
答案 0 :(得分:5)
HyperlinkedModelSerializer
在DRF 2.0中使用lookup_field
中的单个参数,所以和你一样,我无法使用它。
但是,通过我在this question上获得的一些技巧,我能够构建一个ModelSerializer
,其url
字段包含您描述的反向网址。
class OrderSerializer(serializers.ModelSerializer):
# Fields, etc
url = serializers.SerializerMethodField('make_url')
class Meta:
model = Order
# Class info here as usual
def make_url(self, obj):
"""
Build URL for Order instance
"""
# Prepare the IDs you need for the URL reverse
kwargs = {
'customer_pk': obj.customer.id,
'order_id': obj.id,
}
url = reverse('api:single_order', kwargs=kwargs)
return self.context['request'].build_absolute_uri(url)
答案 1 :(得分:1)
如果您正在使用视图集,那么此库将帮助您:drf-nested-routers。