【问题标题】:Why can't I save an object in Django?为什么我不能在 Django 中保存对象?
【发布时间】:2010-12-04 11:02:33
【问题描述】:
thechan = Score.objects.filter(content=44)[0:1]
thechan[0].custom_score = 2
thechan[0].save()

我打印报表,它显示一切正常。但是,它不是 SAVING!

我进入我的数据库,然后运行一个简单的 SELECT 语句..它没有改变!

select custom_score FROM music_score where content_id = 44;

【问题讨论】:

    标签: python django frameworks


    【解决方案1】:

    固定。

    thechan = Score.objects.get(content=44)
    thechan.custom_score = 2
    thechan.save()
    

    【讨论】:

    • 2 个警告:Django 将为您引发:“MultipleObjectsReturned: get() 返回多个分数”,如果超过 1 个“内容”,如果没有结果,将引发 Object.DoesNotExist。跨度>
    【解决方案2】:

    这里发生的事情是 Score.objects.filter() 不返回一个常规列表,而是一个QuerySet。 QuerySet 在某些方面表现得像列表,但每次切片时都会得到一个新的 QuerySet 实例,每次索引到一个时,都会得到模型类的一个新实例。

    这意味着您的原始代码执行以下操作:

    thechan = Score.objects.filter(content=44)[0:1]
    thechan[0].custom_score = 2
    
    thechan = Score.objects.filter(content=44)[0:1]
    thechan[0].save() # saves an unmodified object back to the DB, no effective change
    

    如果出于某种原因您需要在 QuerySet 上执行此操作而不仅仅是使用 get(),您可以编写:

    thechan = Score.objects.filter(content=44)[0]
    thechan.custom_score = 2
    thechan.save()
    

    相反。如果您要迭代 QuerySet 的元素而不是处理单个记录,这种区别就会变得更加重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      • 2015-09-19
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      相关资源
      最近更新 更多