【问题标题】:Django- Update Model objectsDjango-更新模型对象
【发布时间】:2016-07-09 13:33:35
【问题描述】:

我有一个模特:-

class Model(models.Model):
    a = models.BooleanField(default=False)
    time = models.DateTimeField(auto_now_add=True)

在触发all 查询时:-

objs = Model.objects.all().order_by('time')

我需要更新nth 索引处的对象。 N 可以是任何东西。

obj[0].a = True
obj[0].save()

但值不会更新。为什么?

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:
    def set_nth_a_true(n, queryset):
       obj_ = queryset[n]
       obj_.a = True
       obj_.save()
    
    
    objs = Model.objects.all().order_by('time')
    set_nth_a_true(3, objs)
    

    这应该可以,我测试过了

    【讨论】:

    • 两者有什么区别?
    • @PythonEnthusiast 除了obj[0] 而不是objs[0],我什么都看不到
    【解决方案2】:
    objs = Model.objects.all()
    objs[0].a = True  # Queries the database
    objs[0].save()  # And again queries db before save
    

    更多信息为什么会在文档中发生:

    https://docs.djangoproject.com/ja/1.9/topics/db/queries/#when-querysets-are-not-cached

    【讨论】:

      【解决方案3】:

      我刚刚遇到了同样的问题,我可以确认“问题”与 QuerySets 行为有关。如果您需要更新对象,则必须将它们存储为单独的模型对象,例如:

      objs = Model.objects.all().order_by('time')
      to_update = objs[0]
      to_update.a = True
      to_update.save()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-14
        • 2016-12-18
        • 2017-12-13
        • 2012-05-05
        • 2018-08-18
        • 1970-01-01
        • 2012-04-27
        • 2022-10-14
        相关资源
        最近更新 更多