Я использую 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() пройдет без ошибок, что позволит мне сохранить обновленные данные в моей модели.
Атрибут 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()
.