我有以下的車型領域查找:鏈過濾器和排除上的Django模型與跨越的關係
class Order_type(models.Model):
description = models.CharField()
class Order(models.Model):
type= models.ForeignKey(Order_type)
order_date = models.DateField(default=datetime.date.today)
status = models.CharField()
processed_time= models.TimeField()
我想有符合此條件的訂單訂單類型的列表:今天order_date
< =(和processed_time
是空的,status
不爲空)
我想:
qs = Order_type.objects.filter(order__order_date__lte=datetime.date.today(),\
order__processed_time__isnull=True).exclude(order__status='')
這適用於訂單的原始列表:
orders_qs = Order.objects.filter(order_date__lte=datetime.date.today(), processed_time__isnull=True)
orders_qs = orders_qs.exclude(status='')
但qs
是不正確的查詢集。我認爲它實際上返回一個更窄的過濾器(因爲沒有記錄存在),但我不知道是什麼。根據這個(django reference),因爲我引用了一個相關的模型,我認爲排除對原始查詢集(不是來自過濾器的那個)起作用,但我不完全知道如何。
OK,我只是想到了這一點,我認爲作品,但感覺馬虎(有沒有更好的辦法?):
qs = Order_type.objects.filter(order__id__in=[o.id for o in orders_qs])
感謝您的建議和非常詳細的分析。很有用 – rsp 2010-08-09 11:17:55