django - 可以将电子邮件字段用作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
解决方案
在视图集中指定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()
方法。