如何在使用Django模型管理的SQLite数据库中更新整数字段?
我的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
的值。如何修改此字段的值?
答案 0 :(得分:3)
您有两个问题。其中一个,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