Упорядочить по атрибуту связанного объекта в Django / Python - PullRequest
0 голосов
/ 05 декабря 2011

У меня есть статический объект с именем Module. Одним из атрибутов объекта Module является 'name'. У меня есть таблица базы данных с именем Section, которая сохраняет ключ модуля в столбце.

Я бы хотел получить объекты из этой таблицы и отсортировать по названию Модуля, с которым они связаны.

В большинстве случаев, когда я ссылаюсь на объект 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 голосов
/ 05 декабря 2011

Из вашего кода я делаю вывод, что MODULES - это словарь объектов вашего модуля, проиндексированный по значению, по которому они сохраняются в базе данных. Эти объекты имеют свойство name, поэтому, если вы измените свой пример для извлечения объекта из этого словаря по сохраненному имени, вы должны получить то, что вам нужно:

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

Конечно, все это основано на моих догадках о вашем коде. Если это не работает, предоставьте больше информации о section и module_object переменных.

...