【问题标题】:Django Query Count Records on Row行上的 Django 查询计数记录
【发布时间】:2014-04-14 21:11:09
【问题描述】:

我对 django 有点生疏了。

我想知道是否有人可以告诉我如何从这个查询中计算 db 对象:

UserEnteredTld = Tld.objects.filter(FKtoClient=request.user, auth=0)

我曾经这样做过:

UserEnteredTld = Tld.objects.filter(FKtoClient=request.user, auth=0).count()

模板(带有var)中:

{% if UserEnteredTld  %}    
    <h3>I have Tld's</h3>
{% endif %}

观点:

UserEnteredTld = Tld.objects.filter(FKtoClient=request.user, auth=0).count()
UserAuthTld = Tld.objects.filter(FKtoClient=request.user,auth=1).count()

return render(request, 'accounthome.html', {
         'UserEnteredTld':UserEnteredTld,
         'UserAuthTld':UserAuthTld
    })

型号

class Tld(models.Model):
    auth = models.BooleanField(default=False)
    FKtoClient = models.ForeignKey(User) 

但是,这似乎没有输出任何东西。 (我验证了实际行存在...)

明确一点:我只是想计算Tld 表的行数,其中登录用户和auth=0 存在ForeignKey

【问题讨论】:

  • 这很奇怪。没有错误?没有消息?没什么?
  • count 是正确的方法:docs.djangoproject.com/en/1.6/ref/models/querysets/#count 您能否提供更多信息或如何输出数据?
  • 当然,我在上面添加了 IF 语句。有什么事吗?
  • 有可能UserEnteredTld 实际上是0?或者更重要的是,您是否从您的角度提供了这个变量?
  • 这个视图来自一个 django 模板的视图。 UserEnteredTld 正在检查一行(或更多)是否存在

标签: python django django-queryset


【解决方案1】:

不要为此使用count。使用exists (docs)。

user_entered_tld = Tld.objects.filter(FKtoClient=request.user, auth=False).exists()

{% if user_entered_tld  %}    
    <h3>I have Tld's</h3>
{% endif %}

一些注意事项:

  • Django 最新版本是 1.7(测试版)。您不可能使用 2.6.2(这似乎是 Python 版本)
  • 不要对变量进行驼峰式大小写。使用user_entered_tld 而不是 UserEnteredTld。这是一个很好的 Python 约定。

【讨论】:

  • 这里的要点......不幸的是,这并没有什么不同。我已经三重检查了 [Tld] 表,并且当前登录的用户确实存在一行
  • 尝试打印该值并查看返回的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
相关资源
最近更新 更多