В Django, если мой запрос возвращает имя пользователя, могу ли я также получить его имя и фамилию?

Я создаю Django-приложение для юридической фирмы, позволяющее назначать входящие дела юристам фирмы. Юристы являются пользователями, поэтому я использовал список юристов для создания выпадающего списка их имен пользователей, чтобы было легко выбрать активного юриста для назначения.

В некоторых шаблонах, которые я создаю, несложно показать полное имя назначенного адвоката. Я использую "client.assignee.get_full_name", и он показывает "John Attorney".

 I use "client.assignee.get_full_name", and it shows "John Attorney".

Но это часть данных, которая, похоже, едет вместе с моделью клиента.

Я также могу получить имена и фамилии в выпадающих списках меню, запросив список адвокатов через контекстный процессор:

def attorney_menu(request):
    return {
    'attorneys': User.objects.filter(groups__name='attorney-staff')
    }

enter image description here

Код для создания этого кода следующий:

 <ul class="dropdown">
      {% if attorneys %}
          {% for attorney in attorneys %}
              <li><a href="/by_attorney?username={{ attorney.username }}">{{ attorney.first_name }} {{ attorney.last_name }}</a></li>
          {% endfor %}
       {% endif %}
 </ul>

Все вышеперечисленное работает нормально.

Однако в админке, в шаблонах, созданных Django admin по умолчанию, мои выпадающие списки могут показывать только имя пользователя ("johnattorney" вместо "John Attorney"). Также на страницах адвоката (страницы, которые показывают индивидуальных назначенных клиентов адвоката) я могу показать только имя пользователя.

in the attorney pages, I can only show the username

Код для создания этого кода таков

    <h1>Clients assigned to {% if request.GET.username %}{{ request.GET.username }}{% endif %}</h1>

Здесь я хотел бы получить доступ к этому запросу "attorneys", но, похоже, у меня есть только request, который просто возвращает имя пользователя.

Мой вопрос заключается в следующем: В контексте Admin или в контексте страницы, основанной на модели Client, которая знает только имя пользователя как значение "assignee" как часть модели, могу ли я заставить отображаться имя и фамилию вместо имени пользователя?

Да, сначала вам придется определить метод в модели, который вы хотите получить полное имя.

class somemodel(models.Model):
     username = models.CharField(max_length=100)
     first_name = models.CharField(max_length=100)
     last_name = models.CharField(max_length=100)
     

     # then you get the names through the method 
     def get_full_name(self):
        full_name = "%s %s" % (self.first_name, self.last_name)
        return full_name

Вы можете просто вызвать оба имени с атрибутом method в вашем Hmtl следующим образом

 <ul class="dropdown">
      {% if attorneys %}
          {% for attorney in attorneys %}
              <li><a href="/by_attorney?username={{ attorney.username.full_name }}"></a></li>
          {% endfor %}
       {% endif %}
 </ul>

Я смог повторно использовать контекстный процессор для получения полного имени в заголовке страницы By Attorney, как показано ниже:

<h1>Clients assigned to 
    {% if attorneys %}
    {% for attorney in attorneys %}
        {% if attorney.username == request.GET.username %}
      {{ attorney.first_name }} {{ attorney.last_name }}
        {% endif %}
    {% endfor %}
  {% endif %}
  </h1>

Контекстный процессор, кстати, просто:

def attorney_menu(request):
    return {
    'attorneys': User.objects.filter(groups__name='attorney-staff')
    }

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

Вернуться на верх