2014-01-09 35 views
6

我的模型有3場Django的 - 查詢讓行,其中一列不等於在同一型號的另一列

class Table(models.Model): 
    in_time = models.DateTimeField(null=True, blank=True) 
    actual_time = models.DateTimeField(null=True, blank=True) 

我想用這種方式來獲取結果:

select * from Table where in_time > '2013-12-31 00:00:00' and in_time != actual_time 

所以誰能幫助我完成這個

result = Table.objects.filter(in_time__gte = '2013-12-31 00:00:00') 

回答

4

使用Q~ OPERAT或構建否定(NOT)查詢:

import datetime 
from django.db.models import Q, F 

Table.objects.filter(~Q(in_time=F('actual_time')), 
        in_time__gt=datetime.datetime(2013,12,31)) 

F引用於同型號字段:

Django提供˚F表達式,以允許這樣的比較。 F()的實例充當對查詢中模型字段的引用。然後可以在查詢過濾器中使用這些引用來比較同一模型實例上的兩個不同字段的值 。

+0

@ ProfHase85使用排除過濾器和過濾用Q類之間的性能比較有什麼區別? – ndpu

+0

抱歉,我的錯,錯了。沒有明顯的性能差異。 仍在爲一個查詢初始化一個額外的類(如果有一種方法可以在沒有Q類的情況下執行)似乎很麻煩。 (但這只是一個品味問題) – ProfHase85

相關問題