【问题标题】:How to fix 'AttributeError: 'Person' object has no attribute '_default_manager' in Django is_valid() method如何修复'AttributeError:'Person'对象在Django is_valid()方法中没有属性'_default_manager'
【发布时间】:2019-05-29 10:39:49
【问题描述】:

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

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

执行 model_serializer.is_valid() 时出现错误 AttributeError: 'Person' object has no attribute '_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() 方法能够顺利通过,以允许我将更新的详细信息保存到我的模型中。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • @Jacob Nolan 只是为了让您知道,我添加了更多信息。使用raise_exception 参数比检查is_valid() 返回的布尔值更好。
    猜你喜欢
    • 2016-04-23
    • 2018-04-11
    • 2018-08-09
    • 1970-01-01
    • 2019-10-04
    • 2021-04-20
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多