Django Rest Framework通过查找字段而不是pk 3.4 DRF访问项目

ale*_*eks 5 django django-rest-framework

我需要具有查找字段,以便前端发送应删除的电子邮件,但找不到项目。我对此问题进行了很多研究,但无法确定支持哪个DRF版本。

class EmailReminderSerializer(serializers.ModelSerializer):
    city = serializers.CharField(max_length=255)
    url = serializers.HyperlinkedIdentityField(
        view_name='web:email_reminder-detail',
    )

    class Meta:
        model = EmailReminder
        fields = '__all__'
        extra_kwargs = {
            'url': {'lookup_field': 'email'}
        }
Run Code Online (Sandbox Code Playgroud)

现在我有了url,但是它指向实例pk,而不是通过我想要的查找字段。关于它在3.4版本中如何工作的任何建议,或者您对低于=> 3.0的较低版本还有其他解决方案吗?

ale*_*eks 9

噢,我明白了。对于序列化模型,您只需要在视图中使用lookup_field,而对于超链接序列化模型,则需要序列化器中的extra_kwargs以及视图中的lookup字段。希望对别人有帮助

  • [此 DRF 文档部分](https://www.django-rest-framework.org/api-guide/serializers/#how-hyperlinked-views-are-dependent) 可能会给黑暗带来一点光明 (2认同)

ahm*_*med 5

您应该改为修改视图中的查找字段。如DRF 文档所示,您可以执行以下操作。

views.py

from rest_framework import viewsets

class EmailReminderViewSet(viewsets.ModelViewSet):
    serializer_class = TagSerializer
    lookup_field = 'email'
Run Code Online (Sandbox Code Playgroud)