在Django / Python中按相关对象属性排序

时间:2011-12-05 07:56:01

标签: python django sorting django-queryset

我有一个名为Module的静态对象。 Module对象的一个​​属性是'name'。我有一个名为Section的数据库表,它将Module键保存在一列中。

我想从该表中获取对象,并按照与其相关的模块的名称进行排序。

大多数情况下,当我引用Module对象时,它是这样的:section.module.module_object.name

模型是:

class Section(models.Model):
    page = models.ForeignKey(Page)
    module = models.CharField(db_index=True, max_length=50, choices=[(k, '%s %s' % (s.service, s.name)) for k, s in MODULES.iteritems()])

我试过这个:

navigation_links = sorted(navigation_links.values(), key=lambda m: m['module'].module_object.name)

但我收到错误AttributeError: 'unicode' object has no attribute 'module_object'

更新:这是模块对象:

class Module(object):

    def __init__(self, key, name):
        self.key = key
        self.name = name

# ... list of a lot of ALL_MODULES

#dict of the above list
MODULES = dict([(s.key, s) for s in ALL_MODULES])

1 个答案:

答案 0 :(得分:0)

从您的代码中我推断MODULES是Module对象的字典,按值保存在数据库中。这些对象具有name属性,因此如果您修改示例以通过保存的名称从此字典中获取对象,您应该得到所需的内容:

navigation_links = sorted(navigation_links.values(), 
                          key=lambda m: MODULES[m['module']].name)

当然,这都是基于我对您的代码的猜测。如果此方法无效,请提供有关sectionmodule_object变量的详细信息。