Drf error, 'Ожидался словарь, но получен QuerySet.'
У меня проблема с drf функцией view, я получаю ошибку сериализатора как здесь: {'non_field_errors': [ErrorDetail(string='Invalid data. Ожидался словарь, но получен QuerySet.', code='invalid')]}. Вот мое представление, основанное на функциях:
@api_view(["GET","POST"])
def UserSearch(request):
selected_users = Profile.objects.all()
serializer = UserProfileSerializer(data=selected_users)
if serializer.is_valid():
return Response(data=serializer.data)
else:
return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)
Мой сериализатор:
class UserProfileSerializer(serializers.ModelSerializer):
class Meta:
fields = ('user','name','surname','gender','country','city','sport')
model = Profile
И модель профиля:
class Profile(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
name = models.CharField(max_length=50, blank=True)
surname = models.CharField(max_length=50, blank=True)
gender = models.CharField(max_length=50, blank=True)
country = models.CharField(max_length=50, blank=True)
city = models.CharField(max_length=50, blank=True)
sport = models.CharField(max_length=60, blank=True)
#date_of_birth = models.DateField()
def __str__(self):
return f"{self.name} {self.surname} from {self.city}"
Ваша проблема здесь:
serializer = UserProfileSerializer(data=selected_users)
это должно быть
serializer = UserProfileSerializer(selected_users, many=True)
data=
здесь не должно быть, данные предназначены только для python dict, когда вы хотите сериализовать python dict, например.
почему many=True
, потому что вы запрашиваете более 1 строки таблицы, поэтому их должно быть много
и ваш окончательный код будет таким:
@api_view(["GET","POST"])
def UserSearch(request):
selected_users = Profile.objects.all()
serializer = UserProfileSerializer(selected_users, many=True) # <------
if serializer.is_valid():
return Response(data=serializer.data)
# that else was redundant
return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)