2015-10-02 115 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()檢索時,您的更改將持續存在。