Обновите экземпляр модели Django, используя метод POST, используя Serialzer - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь обновить модель экземпляра, если она существует с использованием сериализатора, но у меня возникли какие-либо ошибки?

views.py

def sensor(request):
    if request.method == 'POST':
        data = JSONParser().parse(request)
        sensor = Sensor.objects.filter(name=data['name'])

        if sensor.exists():
            serializer = SensorDetailSerializer(instance=sensor, data=data)
            if serializer.is_valid():
                serializer.save()
                return JsonResponse(serializer.data, status=201)
            else:
                return JsonResponse(serializer.errors, status=400)

        else:
            serializer = SensorDetailSerializer(data=data)
            if serializer.is_valid():
                serializer.save()
                return JsonResponse(serializer.data, status=201)
            else:
                return JsonResponse(serializer.errors, status=400)```


AttributeError: 'QuerySet' object has no attribute '_meta'
[12/Apr/2020 13:13:19] "POST /sensor/ HTTP/1.1" 500 87980

1 Ответ

0 голосов
/ 12 апреля 2020

Вы передаете набор запросов вместо фактического экземпляра в ваш сериализатор (отсюда и ошибка, которую вы получаете AttributeError: 'QuerySet' object has no attribute '_meta').

Вы можете обновить свой код, чтобы сделать что-то похожее на это:

def sensor(request):
    if request.method == 'POST':
        data = JSONParser().parse(request)
        # Fetches the first result of Sensor with name data['name']
        sensor = Sensor.objects.filter(name=data['name']).first()

        if sensor:
            serializer = SensorDetailSerializer(instance=sensor, data=data)
            if serializer.is_valid():
                serializer.save()
                return JsonResponse(serializer.data, status=201)
            else:
                return JsonResponse(serializer.errors, status=400)

        else:
            serializer = SensorDetailSerializer(data=data)
            if serializer.is_valid():
                serializer.save()
                return JsonResponse(serializer.data, status=201)
            else:
                return JsonResponse(serializer.errors, status=400)
...