Django Rest 通过查询参数过滤
Django Rest filtering via query params
我正在按查询参数过滤以查找与查询参数中的 phone 号码匹配的用户。
型号:
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")
查看:
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()),
]
这是我在输入时遇到的错误:http://localhost:9000/find?phone_number=+447865940489
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
那我做错了什么?
编辑:错误已解决,但现在我得到一个空响应
您需要使用双下划线访问相关userprofile
字段的phone_number
字段。
来自 lookups that span relationships:
上的 Django 文档
To span a relationship, just use the field name of related fields
across models, separated by double underscores, until you get to the
field you want.
更改 get_queryset()
中的以下行
queryset = queryset.filter(userprofile_phone_number=phone_number) # wrong
到
queryset = queryset.filter(userprofile__phone_number=phone_number) # use double underscores
我正在按查询参数过滤以查找与查询参数中的 phone 号码匹配的用户。
型号:
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")
查看:
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()),
]
这是我在输入时遇到的错误:http://localhost:9000/find?phone_number=+447865940489
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
那我做错了什么?
编辑:错误已解决,但现在我得到一个空响应
您需要使用双下划线访问相关userprofile
字段的phone_number
字段。
来自 lookups that span relationships:
上的 Django 文档To span a relationship, just use the field name of related fields across models, separated by double underscores, until you get to the field you want.
更改 get_queryset()
queryset = queryset.filter(userprofile_phone_number=phone_number) # wrong
到
queryset = queryset.filter(userprofile__phone_number=phone_number) # use double underscores