这是我的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) 是否可以在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)
字符串中间的标记字母始终是大写字母.其余单词的字母可以有任何情况(使用,使用,使用,代码,代码,代码等)