Django rest Framework - 需要一个项目列表但得到类型 "QuerySet"
Django rest Framework - Expected a list of items but got type "QuerySet"
我尝试序列化查询集。但是我收到 {'non_field_errors': [ErrorDetail(string='Expected a list of items but got type "QuerySet".', code='not_a_list')]} 错误。如何解决这个错误。
def post(self, request):
data = request.data
user_name = data.get('username')
signup_filtered_data = Signup.objects.filter(username= user_name).values()
print(signup_filtered_data)
serializer = SignupSerializer(data= signup_filtered_data, many=True)
serializer.is_valid()
print(serializer.errors)
signup_jason_data = json.dumps(serializer.data)
return HttpResponse(signup_jason_data)
models.py
class Signup(models.Model):
first_name = models.CharField(max_length=50, blank=True, null=True)
last_name = models.CharField(max_length=50, blank=True, null=True)
email = models.EmailField(max_length=50, unique= True)
phone_number = models.CharField(max_length=12, unique= True)
username = models.CharField(max_length=50, unique= True)
password = models.CharField(max_length=50, blank=True, null=True)
serializers.py
class SignupSerializer(serializers.ModelSerializer):
class Meta:
model = Signup
fields = '__all__'
就是你把数据传给serializer的时候在视图中使用了many = True
,但实际上你只是发送了一条消息。
def post(self, request, formate = None):
serializer = SignupSerializer(data= signup_filtered_data)
查看实际答案:
一种更简洁的方法是将过滤器和序列化程序与基于 class 的视图一起使用
一个例子是使用 mixins.
Permissions Classes DjangoRest
filters.py
class SignupFilter(django_filters.FilterSet):
class Meta:
model = Signup
fields = [
'user_name',
]
views.py
class YourNameView(mixins.CreateModelMixin,
viewsets.GenericViewSet):
permission_classes = [permissions.IsAuthenticated, ] # Permission Classes
pagination_class = PageNumberPagination # Pagination Classes
serializer_class = SignupSerializer # Your Serializer
filter_backends = [DjangoFilterBackend] #This need to added on settings.py
filter_class = SignupFilter # Your filter Class
queryset = Signup.objects.all()
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
我尝试序列化查询集。但是我收到 {'non_field_errors': [ErrorDetail(string='Expected a list of items but got type "QuerySet".', code='not_a_list')]} 错误。如何解决这个错误。
def post(self, request):
data = request.data
user_name = data.get('username')
signup_filtered_data = Signup.objects.filter(username= user_name).values()
print(signup_filtered_data)
serializer = SignupSerializer(data= signup_filtered_data, many=True)
serializer.is_valid()
print(serializer.errors)
signup_jason_data = json.dumps(serializer.data)
return HttpResponse(signup_jason_data)
models.py
class Signup(models.Model):
first_name = models.CharField(max_length=50, blank=True, null=True)
last_name = models.CharField(max_length=50, blank=True, null=True)
email = models.EmailField(max_length=50, unique= True)
phone_number = models.CharField(max_length=12, unique= True)
username = models.CharField(max_length=50, unique= True)
password = models.CharField(max_length=50, blank=True, null=True)
serializers.py
class SignupSerializer(serializers.ModelSerializer):
class Meta:
model = Signup
fields = '__all__'
就是你把数据传给serializer的时候在视图中使用了many = True
,但实际上你只是发送了一条消息。
def post(self, request, formate = None):
serializer = SignupSerializer(data= signup_filtered_data)
查看实际答案:
一种更简洁的方法是将过滤器和序列化程序与基于 class 的视图一起使用 一个例子是使用 mixins.
Permissions Classes DjangoRest
filters.py
class SignupFilter(django_filters.FilterSet):
class Meta:
model = Signup
fields = [
'user_name',
]
views.py
class YourNameView(mixins.CreateModelMixin,
viewsets.GenericViewSet):
permission_classes = [permissions.IsAuthenticated, ] # Permission Classes
pagination_class = PageNumberPagination # Pagination Classes
serializer_class = SignupSerializer # Your Serializer
filter_backends = [DjangoFilterBackend] #This need to added on settings.py
filter_class = SignupFilter # Your filter Class
queryset = Signup.objects.all()
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)