是否可以通过django模型名称订购查询?

时间:2014-10-26 01:45:28

标签: python django

我使用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("????")

1 个答案:

答案 0 :(得分:0)

在您的示例中,您正在使用所谓的"多表继承'或者具体的继承',其中为每个模型(建筑,公寓,餐厅和商店)创建一个表,在父和子之间隐含一个OneToOneField。这几乎总是气馁,因为它会产生一些SQL开销。

如果您不打算在子建筑物中添加额外字段,最好使用{{type_Building添加字段IntegerField 3}}选择建筑物的类型(例如,使用buildings = buildings.order_by('type_') ,它具有自然顺序)。然后,您可以轻松列出该字段所订购的建筑物:

{{1}}