你不能在數據庫或查詢集級別做到這一點,因爲不幸的是這兩件事情並不在同一個數據庫表中。你可以在python方面做到這一點(雖然速度更慢,計算量更大)。
假設這兩款車和馬有一個「日期」的屬性,你可以這樣做:
cars = Cars.objects.all().filter(color='red')
horses = Horses.objects.all()
all_things = list(cars) + list(horses)
sorted_things = sorted(all_things, key=lambda x: x.date)
另一種選擇(這是在數據庫級別低效率),將讓他們都來自同一個繼承非抽象模型。
class Item(models.Model):
date = models.DateTimeFiedl()
item_type = models.CharField(max_length=255)
def get_instance(self):
if self.item_type = 'car':
return Car.objects.get(id=self.id)
elif self.item_type == 'horse':
return Horse.objects.get(id=self.id)
class Car(Item):
color = models.CharField(max_length=12)
def save(self, *args, **kwargs):
self.item_type = 'car'
super(Car, self).save(*args, **kwargs)
class Horse(Item):
breed = models.CharField(max_length=25)
def save(self, *args, **kwargs):
self.item_type = 'horse'
super(Horse, self).save(*args, **kwargs)
有了這一點,你可以做
items = Item.objects.all().order_by('date')
for item in items:
print(type(item)) # Always "Item"
actual_item = item.get_instance()
if type(actual_item) == Car:
print("I am a car")
else:
print("I am a horse")
在遍歷他們需要抓住每一個具體的項目(類似於鶺鴒如何處理頁面,您爲抓取對象的便捷方法,基於其父類)
你不能做到這一點。定義的查詢集是來自單個模型的一組對象。 –