如何在Django模板中遍历扩展的用户模型字段?

时间:2019-01-21 15:22:15

标签: python django django-models django-templates django-views

我已经用Profile模型扩展了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)

然后,我可以使用以下模板分别访问Profile模型的每个字段:

<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 :(得分:1)

使用model_to_dict将您的实例转换为python 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 %}