如何修复'AttributeError:'Person'对象在Django is_valid()方法中没有属性'_default_manager'

时间:2019-05-29 02:17:01

标签: django django-models django-rest-framework serializer

我正在使用django rest,并尝试使用POST表单中的更改值更新django模型。我将要更新的模型和新数据放入序列化器实例中。

model_serializer = serializer.PersonSerializer(queryset, request.POST)

执行model_serializer.is_valid()时,出现错误AttributeError:'Person'对象没有属性'_default_manager'

我看过与此类似的问题。我没有找到关于没有'_default_manager'的模型对象的任何信息

在这些问题中,他们建议由于冲突而更改方法/模型的名称。这对我没有用。

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
class PersonSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Person()
        fields = '__all__'
url(r'^api/personview/', views.PersonView.as_view()),
class PersonView(APIView):
    renderer_classes = [TemplateHTMLRenderer]
    template_name = 'rest_person_form.html'

    def get(self, request):
        queryset = models.Person.objects.all().last()
        model_serializer = serializer.PersonSerializer(queryset)
        return Response({'serializer': model_serializer, 'queryset': queryset})


    def post(self, request):
        queryset = models.Person.objects.all().last()
        model_serializer = serializer.PersonSerializer(queryset, request.POST)
        model_serializer.is_valid()
        model_serializer.save()
        return Response({'serializer':model_serializer})

我希望is_valid()方法能够正确无误地传递,以便我将更新后的详细信息保存到模型中。

1 个答案:

答案 0 :(得分:2)

属性model正在等待类,而不是实例。

class PersonSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Person # No () at the end
        fields = '__all__'

提示:如果您不使用is_valid()的退货,则可以使用is_valid(raise_exception=True)自动引发错误400。