Python 通过查询参数进行Django Rest过滤

Python 通过查询参数进行Django Rest过滤,python,django,rest,filtering,django-rest-framework,Python,Django,Rest,Filtering,Django Rest Framework,我正在按查询参数筛选,以查找与查询参数中的电话号码匹配的用户 型号: from django.db import models from django.contrib.auth.models import User from phonenumber_field.modelfields import PhoneNumberField class UserProfile(models.Model): user = models.OneToOneField(User) profil

我正在按查询参数筛选,以查找与查询参数中的电话号码匹配的用户

型号:

from django.db import models
from django.contrib.auth.models import User
from phonenumber_field.modelfields import PhoneNumberField


class UserProfile(models.Model):
    user = models.OneToOneField(User)
    profile_image = models.ImageField(upload_to='static/user_images', blank=True, null=True)
    phone_number = PhoneNumberField(unique=True)
    notifications = models.BooleanField(default=True)
    group_notifications = models.BooleanField(default=True)
    payment_info = models.CharField(max_length=100, default="PLACEHOLDER TEXT")
视图:

网址:

这是我在输入时遇到的错误:

那么我做错了什么


编辑:错误已解决,但现在我得到一个空响应

您需要使用双下划线访问相关
用户档案
字段的
电话号码
字段

从Django文档开始

要跨越关系,只需使用相关字段的字段名 在模型中,用双下划线分隔,直到到达 你想要的领域

更改
get\u queryset()中的以下行


感谢您消除了错误,但现在我得到了一个空响应?可能是因为数据库中没有具有该值
phone\u number
的用户。检查查询集是否返回带有该筛选器的某个对象或
[]
。尝试使用数据库中的电话号码,但仍然获得[]。检查查询是否以正确的格式和类型使用
电话号码进行。我解决了这个问题,在数据库中,电话号码与+一起保存,但在查询参数中,它需要是%2B
class UsersList(generics.ListAPIView):
    serializer_class = UserSerializer

    def get_queryset(self):
         queryset = User.objects.all()
         phone_number = self.request.query_params.get('phone_number', None)
        if phone_number is not None:
             queryset = queryset.filter(userprofile_phone_number=phone_number)
        return queryset
from django.conf.urls import include, url
from users import views

urlpatterns = [

     url(r'find$', views.UsersList.as_view()),

]
 FieldError at /api/v1/user/find
Cannot resolve keyword 'userprofile_phone_number' into field. Choices are: auth_token, date_joined, email, emailaddress, event, eventmembersattending, first_name, groupmember, groups, id, is_active, is_staff, is_superuser, last_login, last_name, logentry, password, request, socialaccount, suggestion, tags, user_permissions, username, userprofile
queryset = queryset.filter(userprofile_phone_number=phone_number) # wrong
queryset = queryset.filter(userprofile__phone_number=phone_number) # use double underscores