首页 > 解决方案 > 如何在 Django Rest Framework 中为“HyperlinkedIdentityField”正确设置“lookup_field”?

问题描述

我需要更改默认HyperlinkedModelSerializer网址。根据文档,我必须url像这样手动定义字段:

序列化程序.py

class StockSerializer(serializers.HyperlinkedModelSerializer):
    url = serializers.HyperlinkedIdentityField(view_name='stock-detail', lookup_field='unique_id')

    class Meta:
        model = Stock
        fields = ['id', 'url', 'symbol', 'unique_id', 'other_details']

或者extra_kwargs像这样使用:

序列化程序.py

class StockSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Stock
        fields = ['id', 'url', 'symbol', 'unique_id', 'other_details']
        extra_kwargs = {
            'url': {'view_name': 'stock-detail', 'lookup_field': 'unique_id'}
        }

但它们都不适合我。错误是:

django.core.exceptions.ImproperlyConfigured: Could not resolve URL for hyperlinked relationship using view name "stock-detail". You may have failed to include the related model in your API, or incorrectly configured the `lookup_field` attribute on this field.

这是我的views.py

class StockViewSet(ModelViewSet):
    queryset = Stock.objects.all()
    serializer_class = StockSerializer

如果我更改lookup_fieldpk(在 serializers.py 中),它可以正常工作,但 url 不是我想要的。那么如何lookup_field正确设置呢?

标签: djangodjango-rest-framework

解决方案


unique_id通过将字段更改models.py为 become 来临时解决问题primary_key=True,以便HyperlinkedModelSerializer自动用于unique_id创建 url。

但问题仍然存在:如何HyperlinkedModelSerializer使用其他字段而不是pk创建 url?

编辑lookup_field = 'unique_id':通过添加和永久修复views.py问题serializers.py


推荐阅读