我已经用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 %}
(这可以编译,但是在运行模板时为空白)
答案 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 %}