【问题标题】:Django -- Updating specific values in a resulting querysetDjango——更新结果查询集中的特定值
【发布时间】:2013-04-15 07:49:41
【问题描述】:

这些行有什么问题:

for i in message_list:
    message_stream = Messages.objects.filter(OrderID = i.OrderID).order_by('-MessageLocalID')
    if message_stream[0].MessageTypeName != 'MessageAck':
        message_stream[0].status = message_stream[0].MessageTypeName
        message_stream[0].save()

status 字段没有保存在数据库中。我在这里误解了什么?

【问题讨论】:

  • 你能发布一个堆栈跟踪吗?
  • 它不显示错误。当我使用更新方法而不是保存时,只会显示错误,如下所示:message_stream[0].update(status = Message_stream[0].MessageTypeName)。如果我能澄清更多,请告诉我:)
  • 你必须使用get 而不是filter
  • Django docs:'请注意,使用 get() 和使用带有 [0] 切片的 filter() 是有区别的。如果没有与查询匹配的结果,get() 将引发 DoesNotExist 异常。'
  • 同意,但是如果我想获得多个值,这需要使用过滤器,进行一些修改并将它们保存到数据库,这可能吗?

标签: django django-models django-queryset


【解决方案1】:

问题出在数据库本身,状态字段,它应该用新值更新,无法接收超过 2 个字符的值。我使用了Django DB迁移并扩展了状态字段,解决了问题。

这个命令就像一个没有问题的魅力:

NpMessages.objects.filter(NPOrderID = i.NPOrderID, MessageTypeName = 'Request').update(status = message_stream[1].MessageTypeName)

并摆脱保存语句,因为它无论如何都不起作用!!!

【讨论】:

  • 你应该安装一个 PEP-8 检查器。阅读您的代码非常困难。
  • 感谢您的建议,我会考虑的:)
猜你喜欢
  • 2021-08-08
  • 1970-01-01
  • 2019-12-10
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多