불행히도 데이터베이스 또는 쿼리 세트 수준에서는이 두 가지가 동일한 데이터베이스 테이블에 존재하지 않으므로 수행 할 수 없습니다. 당신은 파이썬 측면에서 그것을 할 수 있습니다 (비록 느리고보다 계산적으로 많이 사용합니다). 자동차와 말 모두가 "날짜"속성을 가지고 있다고 가정
, 당신은이 작업을 수행 할 수 있습니다
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")
을 수행 할 수 있습니다, 당신은에 따라 개체를 잡아하는 편리한 방법을 그 부모 클래스)
이 작업을 수행 할 수 없습니다. 정의에 의한 쿼리 세트는 단일 모델의 개체 집합입니다. –