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

JPG*_*JPG 2 django django-views django-rest-framework

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


康德片段

# 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'
Run Code Online (Sandbox Code Playgroud)

如果我们尝试访问详细视图,因为/api/v1/users/foo@bar.com/它会引发 404

JPG*_*JPG 6

路由器将匹配包含除斜杠和句点字符之外的任何字符的查找值。对于更严格(或更宽松)的查找模式,请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'
Run Code Online (Sandbox Code Playgroud)


来源: DRF 路由器