电子邮件字段可以用作 django rest 框架的查找字段吗

cod*_*y46 2 django django-rest-framework

模型中的电子邮件字段可以用作其余 api 的查找字段吗?

我有一个模型“用户”,其中 username=models.CharField() 和 email=models.EmailField() 作为成员。我想将电子邮件设置为视图集中的查找字段,并具有以下相同的代码。

def get_queryset(self):
    if 'email' in self.kwargs:
        return User.objects.filter(email=self.kwargs['email'])
    else:
        return User.objects.all()

    lookup_field = 'email'
    lookup_url_kwarg = 'email'
Run Code Online (Sandbox Code Playgroud)

但是,由于电子邮件字段始终包含一个“.”,查找失败并显示“当前路径与这些中的任何一个都不匹配”消息。我们如何使用包含 '.' 的值执行成功的 api 查找。例如电子邮件

获取/api/user/abc@def.com

JPG*_*JPG 6

lookup_value_regex在视图集中指定属性

class FooViewset(ModelViewSet):
    queryset = Foo.objects.all()
    serializer_class = FooSerializer
    lookup_field = 'email'
    lookup_url_kwarg = 'email'
    lookup_value_regex = '[\w@.]+' # here is the new attribute
Run Code Online (Sandbox Code Playgroud)

注意:您不必覆盖该get_queryset()方法。