在Django REST Framework中通过多个参数来反向URL

Art*_*ler 2 python django django-rest-framework

让我们CustomerOrders对模型来使用通常的。

我们怎样才能使一个HyperlinkedModelSerializerOrder url领域反转像一个网址/customers/<customer_pk>/orders/<order_id>/

我曾考虑lookup_fieldMeta课堂上使用,但似乎只接受一个字段。

谢谢你的帮助

jam*_*esc 5

HyperlinkedModelSerializerlookup_fieldDRF 2.0及更高版本中使用单个参数,因此像您一样,我无法使用此参数。

但是,通过一些技巧,我解决了这个问题,从而能够构建一个包含您所描述的反向URL ModelSerializerurl字段。

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)
Run Code Online (Sandbox Code Playgroud)