繁体   English   中英

drf 错误,“需要字典,但得到了 QuerySet。”

[英]drf error, 'Expected a dictionary, but got QuerySet.'

我对 drf function 视图有问题,我收到这样的序列化程序错误: {'non_field_errors': [ErrorDetail(string='Invalid data. Expected a dictionary, but got QuerySet.', code='invalid')]}这是我的基于 function 的视图:

@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

和型材 model:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM