2013-12-10 46 views
2

我有一個模型:<field> __in = [無,...]不ForeignKey的工作(...,空=真)

class Distributor(models.Model): 
    user = models.ForeignKey(User,null=True) 
    ... 

我有兩種經銷商:全球經銷商與用戶=沒有和分銷商關聯到特定的用戶。我有一個全球經銷商foo,用戶=無。我可以用富:

>>> d = Distributor.objects.get(user=None,name='foo') 
>>> d 
<Distributor: foo> 
>>> d.user == None 
True 

假設我有一個用戶登錄的棉花在我想要搜索與用戶=無或用戶=棉各經銷商。我的想法是使用Distributor.objects.filter(user__in=[None,cotton])。然而,這似乎並沒有工作:

>>> d = Distributor.objects.get(user__in=[cotton,None],name='foo') 
Traceback (most recent call last): 
    ... 
DoesNotExist: Distributor matching query does not exist. 

出人意料的是,get(user=None, ...)作品而get(user__in=[None], ...)失敗。我究竟做錯了什麼?我不應該指望這個工作嗎?

目前我通過創建一個額外的用戶來存儲全局實例來解決這個問題。這是在開發實例上的sqlite3。

回答

1

你應該使用__isnullhttps://docs.djangoproject.com/en/dev/ref/models/querysets/#isnull

Distributor.objects.get(
    Q(user__isnull=True) | Q(user__in=[cotton]), name='foo') 
+0

OK,很好,這個作品,它讓我擺脫額外的用戶。但是,原始代碼不起作用的原因是什麼? –

+0

@CottonSeed django不能在列表中找到用戶,所以我認爲傳遞user__in = [棉花,無]等於傳遞user__in = [棉花] – ndpu