Использование внешних ключей в шаблоне Django с / 1001 * -simple-history - PullRequest
0 голосов
/ 20 января 2020

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

Я использую пакет django -simple-history для отслеживания изменений всех записей в основной таблице моей базы данных. Эта таблица имеет внешний ключ с именем history_user_id, который соответствует идентификатору в django таблице auth_user.

Согласно этому примеру ( Показать значение внешнего ключа в django шаблон ), я должен уметь отображать имена пользователей, которые внесли изменения в базу данных, используя следующий код:

<ul>{% for item in history %}
     <li>{{item.history_user_id.username}}</li>
</ul>{% endfor %}

, где история определяется в моем views.py как

def view_history(request,pk):
    project = Project.objects.get(pk=pk)
    history = project.history.all()
    return render(
        request,
        "projects/view_history.html",
        {
            "project": project,
            "history": history,
        }
    )

Шаблон I create может интерпретировать item.history_user_id, и я могу вручную просмотреть таблицу auth_user с соответствующим именем пользователя, но когда я пытаюсь использовать шаблон для рендеринга имени пользователя, вместо этого я получаю пробел. Я пропускаю шаг?

1 Ответ

0 голосов
/ 20 января 2020

Если я правильно вижу, item.history_user_id - это идентификатор пользователя, который внес изменение. Это целое число, которое, разумеется, не имеет свойства с именем user. Если шаблон django попадет в несуществующую переменную, он просто оставит это поле пустым (и не вызовет ошибку). Поэтому вы ничего не видите в своем шаблоне.

Поэтому измените свой код, чтобы получить пользователя, а не user_id

<ul>{% for item in history %}
     <li>{{item.history_user}}</li>
</ul>{% endfor %}

Это описано в документах .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...