通过Django REST Framework中的多个参数反转URL

时间:2014-01-10 14:54:52

标签: python django django-rest-framework

让我们采用CustomerOrder对模型。

我们怎样才能使HyperlinkedModelSerializer Order url字段与/customers/<customer_pk>/orders/<order_id>/这样的网址相反?

我想过使用lookup_field类中的Meta,但它似乎只接受一个字段。

感谢您的帮助

2 个答案:

答案 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