Показать parent_model в шаблоне django - PullRequest
1 голос
/ 21 февраля 2012

У меня есть переменная:

m2m_links = mymodel._meta.many_to_many

Это имеет все поля, которые являются m2m в конкретной модели.Я хочу, чтобы шаблон отображал названия связанных моделей.На мой взгляд, я могу перечислить таблицы следующим образом:

for f in m2m_links:
    print f.related.parent_model

Но в моем шаблоне, если я пытаюсь

{% for table in m2m_links %}
    {{ table.related.parent_model }}<br>
{% endfor %}

, я получаю ошибку: "Caught DoesNotExist при рендеринге"

Как получить имена таблиц для рендеринга в шаблоне?И еще один вопрос, как мне получить только имя, а не что-то вроде

<class 'myapp.models.ModelName'>

, которое я показываю в своем терминале из оператора "print".

1 Ответ

3 голосов
/ 21 февраля 2012

Нет оснований, исходя из предоставленного вами кода шаблона, что вы должны получить эту ошибку.Скорее всего, в вашем шаблоне происходит что-то еще, что вызывает это.

Что касается вашего второго вопроса, способ получить имя класса:

some_class.__name__

ОднакоДвижок шаблонов Django не позволит вам использовать в шаблоне подчеркнутые свойства, поэтому лучше всего подготовить правильный список в вашем представлении:

linked_models = [m2m.related.parent_model.__name__ for m2m in mymodel._meta.many_to_many]

Затем просто зациклите это в своем шаблоне и всеработа уже выполнена.

ОБНОВЛЕНИЕ (на основе комментариев)

Вы делаете это в основном так же, хотя у вас есть несколько вариантов.

  1. Вы можете составить список кортежей и распаковать его в шаблоне:

    linked_models = [(m2m.related.parent_model.__name__, m2m.related.parent_model._meta.verbose_name) for m2m in mymodel._meta.many_to_many]
    

    Затем в своем шаблоне:

    {% for class_name, verbose_name in linked_models %}
        {{ class_name }} {{ verbose_name }}
    {% endfor %}
    
  2. Создайте список словарей и ссылки на ключи в шаблоне:

    linked_models = [{'class_name': m2m.related.parent_model.__name__, 'verbose_name': m2m.related.parent_model._meta.verbose_name} for m2m in mymodel._meta.many_to_many]
    

    Их, в вашем шаблоне:

    {% for model in linked_models %}
        {{ model.class_name }} {{ model.verbose_name }}
    {% endfor %}
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...