2010-04-26 63 views
0

我不知道它是一个django错误还是一个功能,但我对MySQL有一个奇怪的ORM行为。基于列表的筛选器查询集,包括无

class Status(models.Model): 
    name = models.CharField(max_length = 50) 

class Article(models.Model) 
    status = models.ForeignKey(status, blank = True, null=True) 


filters = Q(status__in =[0, 1,2]) | Q(status=None) 
items = Article.objects.filter(filters) 

这条返回的项目,但有些人比其他要求的状态[0,1,2,无]

看SQL查询:

​​

OR app_status.id IS NULL部分似乎是原因。如果我将其更改为OR app_article.status_id IS NULL它可以正常工作。

如何处理?

Thanx。

+0

解决方法:设置我的ForeignKey的默认= 0使它不能来过滤无值,和status__in = [0,1,2]工程确定 – jujule 2010-04-26 23:10:06

回答

0

在Article模型的外键属性中,您引用的status为小写字母's'。但你的Status模型有一个大写'S'。不知道您的拼写错误在哪里,但是如果您的模型实际上是用小写字母's'定义的,那么这可能会解释您看到的奇怪SQL。

1

尝试使用此查询代替:

filters = Q(status__in =[0, 1,2]) | Q(status__isnull=True)