更改Django Shell中的模型字段

时间:2015-10-02 02:18:40

标签: 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

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

3 个答案:

答案 0 :(得分:10)

您应该保存更改,

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

答案 1 :(得分:3)

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

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

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

如果您希望保留数据,则必须在设置game.save()字段后致电likes。这会将数据输入数据库,以便下次通过.get()检索时,您的更改将一直存在。

答案 2 :(得分:0)

如果您需要更改所有项目的所有字段,请尝试以下操作:

from shop.models import Product


Product.objects.filter(recommend=True).update(recommend=False)

你可以在 Django Shell 中使用它。玩得开心:)