首页 > 解决方案 > 可以将电子邮件字段用作django rest框架的查找字段吗

问题描述

模型中的电子邮件字段可以用作其余 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'

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

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

标签: djangodjango-rest-framework

解决方案


在视图集中指定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

注意:您不必重写该get_queryset()方法。


推荐阅读