Отображение имени пользователя в соответствии с идентификатором пользователя в шаблоне Django - PullRequest
2 голосов
/ 02 апреля 2010

Я ожидаю, что это простой вопрос. По какой-то причине у меня пока нет решения.

У меня есть объект из реверсии django: version_list. К каждому объекту в наборе прикреплен идентификатор пользователя. Как получить имена пользователей, которые соответствуют идентификаторам пользователей?

Чтобы быть более понятным, если каждый объект в version_list имеет имя, дату и идентификатор пользователя, как я могу объединить набор version_list с таблицей user, чтобы выяснить, какой идентификатор пользователя идет с каким именем? Это делается в виде или шаблоне?

Ответы [ 3 ]

9 голосов
/ 03 апреля 2010

Я думаю, вы ищете простой тег шаблона.

from django import template
from django.contrib.auth.models import User

register = template.Library()

@register.simple_tag
def get_username_from_userid(user_id):
    try:
        return User.objects.get(id=user_id).username
    except User.DoesNotExist:
        return 'Unknown'

Что бы вы использовали, как:

{% for version in version_list %}
  {% get_username_from_userid version.user_id %}
{% endfor %}
1 голос
/ 02 апреля 2010

Если это не для какой-то унаследованной совместимости, вы действительно должны изменить свою схему, чтобы использовать ForeignKey(User). Данные для этого столбца должны быть одинаковыми, поэтому, если у вас уже есть много вещей, которые вы не хотите потерять в своей базе данных, просто обновите поле модели до

user = models.ForeignKey(User)

и вам даже не придется изменять таблицу, если поле уже называется user_id.

Что касается получения имени пользователя, то всегда выполняется на уровне шаблона, но это зависит от того, хотите ли вы полное имя (Кейси Старк) или имя пользователя (caseywstark).

Используйте {{ user }} для отображения имени пользователя и {{ user.get_full_name }} для отображения полного имени. Второй метод вызывает функцию get_full_name объекта User внутри вашего шаблона. Просто помните, что вы должны установить user.first_name и user.last_name, чтобы это не возвращало пустую строку.

{% for version in version_list %}
    {{ version.user }} wrote version {{ version }}
{% endfor %}
0 голосов
/ 02 апреля 2010

Имеет ли объект версии свойство пользователя (т.е. ForeignKey) или это просто целочисленное поле? Если это внешний ключ пользователя, вы должны сказать:

{% for v in version_list %}
{{ v.user.get_full_name }}
{% endfor %}

В противном случае вам понадобится добавить функцию / свойство к вашей версии объектов, которые ищут соответствующего пользователя, например

from django.contrib.auth.models import User

def related_user(self):
    try:
        return User.objects.get(pk=self.user_id)
    except User.DoesNotExist:
        return None

А потом в вашем шаблоне:

{% for v in version_list %}
{{ v.related_user.get_full_name }}
{% endfor %}
...