相关疑难解决方法(0)

如何使用Django查询集中的条件注释Count

使用Django ORM,可以做一些像queryset.objects.annotate(Count('queryset_objects', gte=VALUE)).抓住我的漂移?


这是一个用于说明可能答案的简单示例:

在Django网站中,内容创建者提交文章,并且普通用户查看(即阅读)所述文章.文章可以发表(即可供所有人阅读),也可以草稿模式.描述这些要求的模型是:

class Article(models.Model):
    author = models.ForeignKey(User)
    published = models.BooleanField(default=False)

class Readership(models.Model):
    reader = models.ForeignKey(User)
    which_article = models.ForeignKey(Article)
    what_time = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何获得所有发表的文章,按照过去30分钟的独特读者排序?即我想要计算每个发表的文章在过去半小时内获得的不同(独特)视图的数量,然后生成按这些不同视图排序的文章列表.


我试过了:

date = datetime.now()-timedelta(minutes=30)
articles = Article.objects.filter(published=True).extra(select = {
  "views" : """
  SELECT COUNT(*)
  FROM myapp_readership
    JOIN myapp_article on myapp_readership.which_article_id = myapp_article.id
  WHERE myapp_readership.reader_id = myapp_user.id
  AND myapp_readership.what_time > %s """ % date,
}).order_by("-views")
Run Code Online (Sandbox Code Playgroud)

这引发了错误:语法错误在"01"或附近(其中"01"是额外的日期时间对象).继续下去并不多.

python django django-queryset

53
推荐指数
2
解决办法
3万
查看次数

Django在BooleanField上注释

我有以下型号:

class Foo(models.Model):
    pass

class Bar(models.Model):
    foo = models.ForeignKey(Foo)
    is_successful = models.BooleanField()
Run Code Online (Sandbox Code Playgroud)

我想获得的所有foo对象与注释如果所有的bar关联对象foo的对象有is_successful作为True

到目前为止,我的查询集是:

foos = Foo.objects.all().annotate(all_successful=Min('bar__is_successful'))
Run Code Online (Sandbox Code Playgroud)

all_successful注释的想法是,如果所有is_successful行的最小值都是1,那么所有行的最小值必须是True(假设0False1True).所以知道我可以像这样使用查询集:

foo = foos[0]

if foo.all_successful == 1:
    print 'All bars are successful'
else:
    print 'Not all bars are successful'
Run Code Online (Sandbox Code Playgroud)

这在sqlite中效果很好但是它在PostgreSQL中失败,因为PostgreSQL无法MIN在布尔列上执行聚合.我想这适用于sqlite,因为sqlite将bools视为整数,因此它可以执行聚合.

我的问题是如何在不将我的is_successful字段转换为的情况下使这个查询集在PostgreSQL中工作IntegerField

感谢名单

sqlite django postgresql django-queryset

7
推荐指数
1
解决办法
2266
查看次数

标签 统计

django ×2

django-queryset ×2

postgresql ×1

python ×1

sqlite ×1