【问题标题】:Changing model field within the Django Shell在 Django Shell 中更改模型字段
【发布时间】:2015-12-30 05:13:34
【问题描述】:

有没有使用 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,但是当我随后输入Game.objects.get(name="testb").likes 时,它仍然输出likes = 0。

【问题讨论】:

    标签: python django shell field models


    【解决方案1】:

    您应该保存更改,

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

    【讨论】:

    • 这比我想象的要简单得多...感谢您的帮助,完美运行
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      from shop.models import Product
      
      
      Product.objects.filter(recommend=True).update(recommend=False)
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-26
        • 2021-07-30
        • 2019-09-29
        • 1970-01-01
        • 2015-09-14
        • 1970-01-01
        相关资源
        最近更新 更多