python - 在 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
并手动完成所有事情来做到这一点。有没有更好的办法?谢谢你的帮助。
解决方案
我认为在你的模型中
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"),
]