2015-10-02 118 views
2

有没有办法使用Django shell来修改字段值?我可以创建,删除和查询模型,但我不知道如何改变现有的字段值。在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 

在Django的壳,我尝试Game.objects.get(name="testb").likes = 5,但它仍然输出likes = 0当我输入正确的Game.objects.get(name="testb").likes之后。

回答

7

您应该保存更改,

game = Game.objects.get(name="testb") 
game.likes = 5 
game.save() 
+0

这比我以为会更简单... 感谢您的帮助,完美的作品 –

3

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

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

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

如果您希望数据持久存在,则必须在设置likes字段后调用game.save()。这会将数据输入到数据库中,以便下次通过.get()检索时,您的更改将持续存在。