简短问题:
在Django DRF序列化器中访问url路径参数(不是url query 参数)的合适方法是什么?
例如,如何获取/api/blogposts/:blogid/comments
中的blogid
值。
上下文:
A有一个Django DRF API,其中我有一个类似于以下内容的URL:
/api/blogposts/:blogid/comments
字符串
由一般视图处理的:
from rest_framework import generics
class MyCommentsView(generics.ListCreateAPIView):
queryset = Comment.objects.all()
serializer_class = CommentSerializer
型
(blog
和comment
只是示例资源;我正在和不同的人一起工作)
此视图允许通过POST调用创建新注解。由于传统原因,请求还将包含blog_id
作为请求主体参数。
在我的Serializer中,我想检查url中的:blogid
是否与body中的blog_id
相同。目前我做了以下工作,但路径分割和元素选择感觉非常脆弱(例如:如果我在urls.py
中重新构造URL,我需要调整自定义解析)。那么,有没有更好的办法呢?
class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = Comment
fields = [..., 'blog_id', ... ]
...
def validate_blog_id(self, value):
# Better way for next line?
blogid_in_url = int(self.context['request'].path.split('/')[-2])
if blogid_in_url != value:
...
型
注意:我的问题是一个url路径参数,而不是url查询参数(如api/blogposts?blogid=55
中的blogid
)。我知道一个url查询参数可以通过self.context['request'].query_params
访问。
2条答案
按热度按时间34gzjxbg1#
我不能说这是一个好方法,但建议替代:
你可以像这样在序列化器中访问你的url参数:
字符串
另一种方法,你可以覆盖
ListCreateAPIView
的create方法;型
fkaflof62#
当你使用像
ListCreateAPIView
这样的泛型API视图时,你可以在序列化器中访问url参数,比如:字符串