Django rest框架中平面url的设计

2024-10-03 00:27:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表视图,在这个视图中我有一个url,通过单击它,它会将我指向详细视图。我希望这个url是一个平面url,以这种方式127.0.0.1:8000/?id=4,id是对象的id,我怎么做?我想我可以通过拥有一个serializer.SerializerMethodField来实现一个get_url函数。有更好的方法吗?你知道吗

编辑 现在我有了这样的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以这种方式生成url 127.0.0.1:8000/4/但是我想以上面提到的方式生成url。我想通过SerializerMethodField和定义一个get_url来做到这一点,并且手工地做每件事。有更好的办法吗?谢谢你的帮助。你知道吗


Tags: 对象nameview视图idurl列表get
2条回答

我想 在您的模型中

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())

添加url将是

from django.urls import path

    app_name = 'app_name'
    urlpatterns = [

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

你的观点是127.0.0.1:8000/,在'?id=4'可以通过请求数据接收'id'。你知道吗

在视图中,检索ID时使用:

id = request.GET["id"]

如果找到了一个ID,则可以显示检索到的对象的详细信息,否则显示默认页面。你知道吗

相关问题 更多 >