2010-04-26 61 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)