Как решить ошибку «dict» объект не имеет атрибута «save» при попытке сделать обновление в БД - PullRequest
0 голосов
/ 02 января 2019

У меня проблема с работой с django и его модельной системой. Я новичок в работе с Django, и я застрял, потому что я, вероятно, ошибаюсь.

Я пытаюсь обновить свою БД и получаю эту ошибку:

"Объект 'dict' не имеет атрибута 'save'"

Я только пытаюсь установить поле, чтобы быть активным или неактивным, в зависимости от ввода проверки в моем HTML.

Я отправляю правильное значение по запросу.

Я получаю словарь вместо модельного объекта, но я не знаю, как это изменить, мне кажется, я следовал документации django. шаг за шагом.

models.py:

from django.db import models
class Flags(models.Model):
    num = models.IntegerField(null=False)
    deliver= models.CharField(max_length=1, null=False)

    class Meta:
        db_table ="FLAGS"

views.py:

from django.http import HttpResponse
from Logistic.models import Flags

def updateDisponibilidad(request):
    flag = request.GET.get("flag")
    print(flag)
    disp = Flags.objects.using('default').values('num', 'deliver').get(num__exact=1)
    print(disp)
    disp['deliver'] = str(flag)
    disp.save()
    return HttpResponse(disponibilidad)

Django docs. говорит, что я могу получить доступ к значениям (в данном случае) disp.deliver, но когда я это делаю, я получаю другую ошибку:

Объект 'dict' не имеет атрибута 'доставить'

Было бы здорово, если бы кто-нибудь мог мне помочь, чтобы я мог использовать этот код:

disp.deliver = flag
disp.save()

И работать с этим.

1 Ответ

0 голосов
/ 02 января 2019

Это связано с .values() в вашем запросе, если вы хотите получить объект Flags, вы должны удалить его, поэтому:

def updateDisponibilidad(request):
    flag = request.GET.get("flag")
    disp = Flags.objects.using('default').get(num=1)  # <i>no</i> .values()
    print(disp)
    disp['deliver'] = str(flag)
    disp.save()
    return HttpResponse(disponibilidad)

Если вы используете .values(), вы получаете словарь. Здесь мы получаем объект Flags, а объекты модели имеют метод .save() для обновления объекта в базе данных.

Если вы хотите отобразить содержимое в ответ JSON, вам следует использовать сериализатор , а не использовать для этого функции Django ORM.

Кроме того, если вы обновляете сущности, обычно используется запрос POST, PUT, PATCH и т. Д., А не запрос GET.

...