Пользовательские поля Django показаны пустыми в шаблоне - PullRequest
0 голосов
/ 09 июля 2019

не может получить доступ к полям в шаблонах

model.py:

class DSS(models.Model):
    title = models.CharField(max_length=255, null=True, blank=True, verbose_name='عنوان')
    usr = models.ForeignKey(User, related_name='owner', verbose_name='کاربر')

view.py:

def state(request):
    result = DSS.objects.values('usr').order_by('usr').annotate(count=Count('usr'))
    context = {'result': result,}
    return render(request, 'state.html', context)

мой шаблон:

 <tr>
    <td>{{ item.usr }}{{ item.usr.get_username}}{{ item.usr.username}}{{ item.usr.get_full_name}}</td>
    <td>{% with item.usr.get_username as usrnm %}
        {{ item.usr.get_full_name|default:usrnm }}
        {% endwith %}</td>
    <td>{{ item.usr.first_name }} {{ item.usr.lastname }}</td>
    <td>{{ item.owner.first_name }}</td>
    <td>{{ item.count }}</td>
</tr>

{{item.count}} работают хорошо и {{item.usr}} просто показывают идентификатор пользователя, но мне нужно отобразить имя пользователя, однако ни одна из этих попыток не сработала!

Ответы [ 3 ]

2 голосов
/ 09 июля 2019

Вместо values(), попробуйте отправить фактический набор запросов.А чтобы уменьшить попадания в БД, вы можете использовать select_related().Например:

result = DSS.objects.<b>select_related('usr')</b>.order_by('usr')

Также .annotate(count=Count('usr')) не будет работать должным образом.Он покажет 1 для каждого элемента набора запросов.Вместо этого попробуйте выполнить агрегирование.

def state(request):
    result = DSS.objects.select_related('usr').order_by('usr')
    <b>user_count = result.aggregate(u_count=Count('usr')).get('u_count')</b>
    context = {'result': result, <b>'user_count': user_count</b>}
    return render(request, 'state.html', context)

и отобразить его в шаблоне:

{{ user_count }}
1 голос
/ 09 июля 2019

Вместо

result = DSS.objects.values('usr').order_by('usr').annotate(count=Count('usr'))

Попробуйте

result = DSS.objects.values('usr', 'usr__username').order_by('usr').annotate(count=Count('usr'))

И в html

{{ item.usr__username }}
0 голосов
/ 09 июля 2019

Попробуйте добавить метод __str__ в модель пользователя.

def __str__(self):
        return self.first_name + " " + self.last_name
        # use the fields you have in your user model, mine was first_name and last_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...