2011-12-05 73 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