我有一个名为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])
答案 0 :(得分:0)
从您的代码中我推断MODULES
是Module对象的字典,按值保存在数据库中。这些对象具有name
属性,因此如果您修改示例以通过保存的名称从此字典中获取对象,您应该得到所需的内容:
navigation_links = sorted(navigation_links.values(),
key=lambda m: MODULES[m['module']].name)
当然,这都是基于我对您的代码的猜测。如果此方法无效,请提供有关section
和module_object
变量的详细信息。