2011-12-05 55 views
0

我有一个名为Module的静态对象。 Module对象的其中一个属性是'name'。我有一个名为Section的数据库表,它将模块密钥保存在列中。按照Django/Python中的相关对象属性排序

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

大多数时候,当我引用模块对象,它是这样的: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'

U PDATE:这里是模块对象:

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

@DTTyrsa - 我想从该表中获取对象并按照它们相关的模块的名称进行排序。但是,这两种方法给我错误。 – Brenden

+1

'module'字段只是一个字符串。你需要以某种方式检索你的对象。当然,你不能在数据库层面上做到这一点。 – DrTyrsa

+0

@DTTyrsa所以看来我需要从数据库中抓取它们,然后按照module_object的属性进行排序。这就是我不知道该怎么做的。 – Brenden

回答

0

从你的代码,我推断MODULES是你的模块对象,通过索引值由它们保存在数据库中的字典。这些对象都有一个name属性,因此,如果您修改例子来从该词典由保存名称的对象,你应该得到你所需要的:

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

当然,这都是基于我对猜测你码。如果这不起作用,请提供有关sectionmodule_object变量的更多信息。

+0

谢谢。对于缺乏信息抱歉。 MODULES是静态对象的字典,与数据库无关。我已经添加了上面的结构。然后,Section引用模块对象的键。 – Brenden

+0

那么,我的解决方案是否工作?如果不是,那么错误是什么? – DzinX