在DRF路由器中更改查找正则表达式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在DRF路由器中更改查找正则表达式相关的知识,希望对你有一定的参考价值。

我们如何在视图集和路由器中更改lookup_field的查找正则表达式?


Conde Snippet

# serializers.py
class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('username', 'email', 'is_staff')


# views.py
class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    lookup_field = 'email'

如果我们尝试以/api/v1/users/foo@bar.com/的身份访问详细视图,它就会提高404

答案

路由器将匹配包含除斜杠和句点字符之外的任何字符的查找值。对于更严格(或宽松)的查找模式,请在视图集上设置lookup_value_regex属性。这是在视图类中设置lookup_value_regex以匹配lookup_field

# views.py
class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    lookup_field = 'email'
    lookup_value_regex = '[w.@]+' # You can set any valid regex here to match anything excepts 'slashes'

资料来源:DRF Routers

以上是关于在DRF路由器中更改查找正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

DRF - 如何使用条件更改 serializer.PrimaryKeyRelatedField 的过滤器查找键?

正则表达式在代码中查找空注释

查找替换的正则表达式

正则表达式查找函数的所有引用并将参数替换/添加到所有实例

javascript 正则表达式在代码中查找注释

Word中使用正则表达式进行查找和替换与难题征解