更改Django Shell中的模型字段

Kyl*_*ong 7 python django shell field models

反正有没有使用Django shell来修改字段值?我可以创建,删除和查询模型,但我不知道如何更改现有的字段值.

class Game(models.Model):
    name = models.CharField(max_length=128, unique=True)
    views = models.IntegerField(default=0)
    likes = models.IntegerField(default=0)
    slug = models.SlugField(unique=True)

    def save(self, *args, **kwargs):
        self.slug = slugify(self.name)
        super(Game, self).save(*args, **kwargs)

    def __str__(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)

在Django shell中,我试试Game.objects.get(name="testb").likes = 5,但是likes = 0当我Game.objects.get(name="testb").likes之后输入时它仍然会输出.

pra*_*890 13

你应该保存更改,

game = Game.objects.get(name="testb")
game.likes = 5
game.save()
Run Code Online (Sandbox Code Playgroud)


dur*_*rsk 7

调用Game.objects.get()从数据库中检索数据。

当你执行该语句时Game.objects.get(name='test').likes = 5,您将从数据库中检索数据,创建一个Python对象,然后在内存中的该对象上设置一个字段。

然后,当您Game.objects.get(name='test')再次运行时,您将从数据库中重新提取数据并将 python 对象加载到内存中。请注意,上面,当您设置为 时likes5您纯粹在内存中执行此操作,并且从未将数据保存到数据库中。这就是为什么当您重新拉取数据时,likes0.

如果想要持久化数据,必须game.save()在设置likes字段后调用。这会将数据输入数据库,以便下次您通过 检索它时.get(),您的更改将保留。