Reputation: 181
I try to serialize query set. But Im getting {'non_field_errors': [ErrorDetail(string='Expected a list of items but got type "QuerySet".', code='not_a_list')]} error. How to solve this error.
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__'
Upvotes: 3
Views: 8940
Reputation: 146
A Much cleaner approach is using filters and serializer with a class-based view A example of that is using 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)
Upvotes: 1
Reputation: 1022
It is that you have used many = True
in the view when you pass the data to the serializer, but you are in fact only sending a single message.
def post(self, request, formate = None):
serializer = SignupSerializer(data= signup_filtered_data)
See the actual answer: Actual answer
Upvotes: 2