Как взаимодействовать с целочисленным полем в Django SQLite Database? - PullRequest
0 голосов
/ 14 января 2019

Как обновить целочисленное поле в БД SQLite, управляемой с помощью моделей Django?

Выдержка из моих моделей Django:

class Event(models.Model):
  title = models.CharField(max_length=100)
  [...]
  attendees = models.ManyToManyField(Attendee)
  max_attendees = 8
  #max_attendees = models.PositiveSmallIntegerField(null=True, blank=True)

Тестирование с python3 manage.py shell

>>> from main.models import *
>>> Event.objects.first()
<Event: 8 places left>
>>> Event.objects.first().max_attendees
8
>>> Event.objects.first().max_attendees = 2
>>> Event.objects.first().save()
>>> Event.objects.first().max_attendees
8

Как видите, значение не обновляется даже при save() на «объекте».

Я также пробовал:

>>> Event.objects.first().max_attendees = models.PositiveSmallIntegerField(2)

Но это также не обновляет значение max_attendees. Как я могу изменить значение этого поля?

1 Ответ

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

У вас есть две проблемы. Во-первых, max_attendees - это не поле базы данных, а постоянное значение. Измените его на:

class Event(models.Model):
   ...
    max_attendees = models.PositiveSmallIntegerField(default=8)

После этого изменения может потребоваться запустить python manage makemigrations и python manage migrate.

Во-вторых, каждый раз, когда вы звоните Event.objects.first(), вы создаете новый объект, используя существующую запись базы данных. Вы должны присвоить экземпляр переменной и использовать его до тех пор, пока не закончите, т.е.:

>>> my_event = Event.objects.first()
>>> my_event.max_attendees = 2
>>> my_event.save()

Затем вы можете повторно запросить записанные данные:

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