【问题标题】:Django Query - How to use the objects.filter resultsDjango Query - 如何使用 objects.filter 结果
【发布时间】:2016-08-28 12:15:38
【问题描述】:

如果我使用以下代码,它可以完美运行:

campaignnoquery = UserSelection.objects.filter(user=349).order_by('-campaignno')[:1]

for x in campaignnoquery:
    test2 = x.campaignno

但是,当我尝试时:

campaignnoquery = UserSelection.objects.filter(user=349).order_by('-campaignno')[:1]

test1 = campaignnoquery.campaignno

我收到以下错误:

 test1 = campaignnoquery.campaignno
AttributeError: 'QuerySet' object has no attribute 'campaignno'

我确信这是一些基本的东西,我可以继续使用那个有效的,但我只是对正在发生的事情很感兴趣。

非常感谢,艾伦。

【问题讨论】:

  • filter 方法返回一个QuerySet,您需要对其进行迭代以获得compaignno 属性。这就是为什么您在 campaignnoquery 上迭代的 sn-p 起作用的原因。你想完成什么?
  • 我所做的只是返回活动编号。我只是想知道是否可以在没有额外的迭代步骤的情况下完成,或者是否应该这样做?非常感谢您的快速响应。

标签: python mysql django


【解决方案1】:

campaignnoquery 正如错误所说,是一个QuerySet 对象(在这种情况下,它包含UserSelection 实例)。

您的错误是将其视为单个 UserSelection 对象的实例。

您确定这个filter 将始终返回一个对象吗?如果是这样,您可以改用get

如果不是,您希望campaignnoquery.campaignno 返回什么? (考虑到campaignnoqueryUserSelection 对象的)。

【讨论】:

  • 这完全有道理。因为我使用了 "[:1]" 部分,所以我认为它总是最多返回 1,也许没有。但我认为我可以使用“尝试”方法来捕捉它。我会测试一下 get 选项,谢谢。
  • @AlanTingey [:1] 确实确保campaignnoquery 将包含单个对象,它仍将包含在QuerySet 中。就像'a string'['a string'] 不一样。
【解决方案2】:

您引用了错误的对象!

当循环通过campaignnoquery时,x变成campaignnoquery[0]、campaignnoquery[1]等等……

尝试像这样引用它:

test1 = campaignnoquery[0].campaignno

【讨论】:

  • 是的,这很有效并且完全有意义。我可以勾选两个选项正确吗?
  • @AlanTingey 您可以接受 1 个答案,但喜欢多少就点赞
  • @AlanTingey 如果有帮助,您应该接受并投票:)
猜你喜欢
  • 2011-06-16
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
  • 2011-11-29
  • 2011-08-22
  • 2019-09-11
相关资源
最近更新 更多