小编Dmi*_*ylo的帖子

如何在Django中`extra`调用提供的计算字段上过滤查询集?

这是我的django型号:

class Author (models.Model):
    name = models.CharField(max_length=255)
    removed = models.BooleanField(default=False)

class Image (models.Model):
    author = models.ForeignKey(Author)
    name = models.CharField(max_length=255)
    height = models.PositiveIntegerField()
    width  = models.PositiveIntegerField()
Run Code Online (Sandbox Code Playgroud)

基本上,我需要选择每个未被删除的作者以及具有5个或更少高度等于100的图像的作者.

我使用MySQL,这里是版本信息:

mysql Ver 14.12 Distrib 5.0.67

当然,它看起来像这样:

Author.objects.filter(removed=False).extra(select={
    'imgcount': """SELECT COUNT(*) 
                   FROM ormtest_image 
                   WHERE height=100 AND 
                         ormtest_image.author_id=ormtest_author.id"""
}).filter(imgcount__lte=5)
Run Code Online (Sandbox Code Playgroud)

它不起作用:"FieldError:无法将关键字'imgcount'解析为字段.选项包括:id,image,name,removed"

好的,让我们试试额外方法的参数:

Author.objects.filter(removed=False).extra(select={
    'imgcount': """SELECT COUNT(*) 
                   FROM ormtest_image 
                   WHERE height=100 AND 
                         ormtest_image.author_id=ormtest_author.id"""
}, where=['imgcount <= 5'])
Run Code Online (Sandbox Code Playgroud)

它不起作用:"OperationalError:(1054,'where子句'中的未知列'imgcount')",因为要过滤MySQL中计算字段的数据,你必须使用HAVING子句.

有任何想法吗?

我用Django 1.1和trunk的最新版本测试了这个.

到目前为止,我使用这个hack:

Author.objects.filter(removed=False).extra(select={
    'imgcount': """SELECT COUNT(*) 
                   FROM ormtest_image 
                   WHERE height=100 AND 
                         ormtest_image.author_id=ormtest_author.id"""
}, where=['1 HAVING imgcount <=5']) …
Run Code Online (Sandbox Code Playgroud)

django django-models

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

如何在Python中为部分正则表达式设置ignorecase标志?

是否可以在Python中实现类似这样的简单:

#!/usr/bin/perl
my $a = 'Use HELLO1 code';
if($a =~ /(?i:use)\s+([A-Z0-9]+)\s+(?i:code)/){
    print "$1\n";
}
Run Code Online (Sandbox Code Playgroud)

字符串中间的标记字母始终是大写字母.其余单词的字母可以有任何情况(使用,使用,使用,代码,代码,代码等)

python regex

5
推荐指数
2
解决办法
6763
查看次数

标签 统计

django ×1

django-models ×1

python ×1

regex ×1