首页 > 解决方案 > 在 django rest 框架中设计平面 url

问题描述

我有一个列表视图,其中有一个 url,通过单击它,它会将我引导到详细视图。我希望这个 url 以这种方式成为一个平面 url,127.0.0.1:8000/?id=4而 id 是对象的 id 我怎么能这样做?我想知道我可以通过一个serializer.SerializerMethodField并实现一个get_url功能来做到这一点。有更好的方法吗?

编辑
现在我有这种方式的网址,127.0.0.1:8000/4/这是我的序列化程序

#serizlier.py
class SampleSerizlier(serizlier.ModelSerializer):
    url = serializers.HyperlinkedIdentityField(
        view_name="app-name:view-name", lookup_field='id'
    )
    class Meta:
        model = Model
        fields = "__all__"

HyperlinkIdentityField这种方式生成网址,127.0.0.1:8000/4/但我想以我上面提到的方式生成网址。我想通过SerializerMethodField定义一个get_url并手动完成所有事情来做到这一点。有没有更好的办法?谢谢你的帮助。

标签: pythondjangopython-3.xrestdjango-rest-framework

解决方案


我认为在你的模型中

class Modelname(models.Model):
    def get_url(self):
        return reverse('app_name:url_name', args=(self.pk,))

在序列化程序中:

class ModelSerializer(serializers.ModelSerializer):
    id = serializers.SerializerMethodField()

    class Meta:
        model = Resource
        fields = "__all__"

    def get_id(self, obj):
        request = self.context.get('request')

        return request.build_absolute_uri(obj.get_url())

添加网址将是

from django.urls import path

    app_name = 'app_name'
    urlpatterns = [

        path('url_name/', your_view.as_view(), name="url_name"),
    ]

推荐阅读