2010-08-23 42 views
2

我需要用django orm選擇行。我需要這樣的查詢相當於用Django orm查詢

select * from order where (user_from = u and f1 not is null) or (user_to = u and f2 not is null) 

我嘗試這樣做是這樣的:

Order.objects.filter(user_from = self).exclude(f1 = None)+Order.objects.filter(user_to = self).exclude(f2 = None) 

但在ORM沒有工會..怎麼可以通過ORM完成這樣的任務? (我看到了一個解決方案,在我的模型中添加了一些字段,但它很有趣,可以在不添加字段的情況下解決)

+0

你可以發佈'Order'模型的源代碼嗎? – 2010-08-23 14:00:38

回答

1

看一看Q objects。您可以執行如下操作:

Order.objects.filter(
    Q(user_from = u, f1__isnull = False) | Q(user_to = u, f2__isnull = False) 
) 

警告:這是未經測試的代碼。查看生成的實際SQL查詢並確認這確實是您需要的是個好主意。

+0

收到異常: 不允許在字段'to_url_placed_update'加入。查找類型是否拼錯了'is_null'? 我第一次看到它使用__is_null = False 您是否確定django orm中存在此功能? – Evg 2010-08-23 13:22:59

+0

我的錯誤。 'is_null'應該是'isnull'。提出答案。 – 2010-08-23 13:28:59

+0

這適用thanx。 – Evg 2010-08-23 15:51:56