Как исправить 'AttributeError: у объекта' Person 'нет атрибута' _default_manager 'в методе Django is_valid () - PullRequest
1 голос
/ 29 мая 2019

Я использую django rest и пытаюсь обновить мою модель django измененными значениями из формы POST. Я помещаю обновляемую модель и новые данные в экземпляр сериализатора.

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 Ответ

2 голосов
/ 29 мая 2019

Атрибут model ожидает класса, а не экземпляра.

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

Совет: Если вы не используете возврат из is_valid(), вы можете использовать is_valid(raise_exception=True), чтобы автоматически вызвать ошибку 400.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...