我使用django-model-utils帮助管理某些django模型中的继承,但我遇到了问题。
简而言之,我有一个通过继承类型合并多个模型的外键,我想知道的是,是否可以根据模型名称对查询进行排序?
在下面的示例中,是否可以对buildings
QuerySet
进行排序,以便按顺序显示公寓,餐馆和商店?
models.py
:
class Building(models.Model):
objects = InheritanceManager()
managed_by = fields.ForeignKey(RealEstateAgent)
name = fields.CharField(max_length=100)
class Apartment(Building):
pass
class Restaurant(Building):
pass
class Shop(Building):
pass
class RealEstateAgent(models.Model):
pass
views.py
:
def show_agents_buildings(request,agent):
buildings = models.Buildings.objects.filter(managed_by=agent).select_subclasses()
if request.GET.get("sort",None) = "building_type"
buildings = buildings.order_by("????")
答案 0 :(得分:0)
在您的示例中,您正在使用所谓的"多表继承'或者具体的继承',其中为每个模型(建筑,公寓,餐厅和商店)创建一个表,在父和子之间隐含一个OneToOneField。这几乎总是气馁,因为它会产生一些SQL开销。
如果您不打算在子建筑物中添加额外字段,最好使用{{type_
向Building
添加字段IntegerField
3}}选择建筑物的类型(例如,使用buildings = buildings.order_by('type_')
,它具有自然顺序)。然后,您可以轻松列出该字段所订购的建筑物:
{{1}}