Как пройти через расширенные поля модели пользователя в шаблоне Django? - PullRequest
0 голосов
/ 21 января 2019

Я расширил пользовательскую модель Django с помощью модели профиля:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
    date_of_birth = models.DateField()
    address = models.CharField(max_length=300)
    postcode = models.CharField(max_length=15)

Затем я передаю эти данные в шаблон через это представление:

def profile(request):
    args = {'user': request.user}
    return render(request, 'users/profile.html', args)

Затем я могу получить доступ к каждомуПоле модели профиля индивидуально в шаблоне с:

<p>Your DOB is: {{ user.profile.date_of_birth }}</p>

Однако я хочу использовать цикл for, чтобы сказать:

{%for field in Profile model %}
    <p>{{field name}} = {{field value}}
{% endfor %}

Но я пробовал много разныхвещи, ни одна из которых не работает, например,

{% for field in user.profile.all %}
    <p>{{ field }}</p>
{% endfor %}

(Это компилируется, но пусто при запуске шаблона)

1 Ответ

0 голосов
/ 21 января 2019

Используйте model_to_dict, чтобы преобразовать ваш экземпляр в питон dict:

from django.forms.models import model_to_dict

def profile(request):
   profile = model_to_dict(request.user.profile)
   return render(request, 'users/profile.html', {'profile':profile})

Теперь вы можете получить доступ к полям вашего профиля в шаблоне:

# items is a python dictionary method to return key/value pair.
{% for field, value in profile.items %} 
    <p>{{ field }} = {{ value }}</p>
{% endfor %}
...