如何在Django模板中输出表单字典
我在视图中保存了一个表单列表作为变量,然后把它传给模板。
当我在模板中遍历这个表单列表时,出现了一个错误:
AttributeError: 'long' object has no attribute 'get'
我最开始尝试把表单保存在一个字典里,但也遇到了同样的错误。我可以遍历传给模板的查询集,但这个表单的列表或字典似乎无法被遍历。
有没有什么解决办法呢?
这是我相关的代码:
forms.py
from django.contrib.auth.models import User
from django import forms
from apps.account.models import UserProfile
class StaffUserTypeForm(forms.Form):
user_type = forms.ChoiceField(choices=UserProfile.STAFF_CHOICES)
account/models.py
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
DEFAULT = 0
ADMIN = 1
MANAGER = 2
COORDINATOR = 3
REALTOR = 4
TEAM_CAPTAIN = 5
PROPERTY_OWNER = 6
PRELOAD = 7
BILLING = 8
COORDINATOR_PRELOAD = 9
STAFF_CHOICES = (
(ADMIN, 'Admin'),
(MANAGER, 'Manager'),
(COORDINATOR, 'Coordinator'),
(COORDINATOR_PRELOAD, 'Coordinator +Preload'),
(PRELOAD, 'Preloader'),
(BILLING, 'Billing'),
)
...
views.py
from forms import *
...
staff = Staff.objects.all()
roles = []
for member in staff:
form = StaffUserTypeForm(initial=member.user.userprofile.user_type)
roles.append(form)
context.update({'staff':staff,'roles':roles})
...
模板(这里出错了)
{% for role in roles %}
{{role}}
{% endfor %}
不过这个是可以正常工作的:
{% for member in staff %}
{{member.user.first_name}}
{% endfor %}
更新
这个特定的错误是因为我没有在表单的initial
中指定user_type。
应该是:
form = StaffUserTypeForm(initial={'user_type':member.user.userprofile.user_type})
但是,我仍然面临一个问题,就是无法为每个员工输出表单,因为我不能在模板中将变量作为字典的键来引用:
如果:
roles = {}
for member in staff:
roles[member] = StaffUserTypeForm(initial={'user_type':member.user.userprofile.user_type})
我无法获取特定员工的表单:
{% for member in staff %}
{{roles.member}}
{% endfor %}
这并不奏效,也没有抛出错误。它只是看起来在寻找roles['member'],但这个键并不存在。
1 个回答
1
因为 roles
这个字典里同时包含了成员(作为键)和形式(作为值),那么为什么还要遍历 staff
呢?直接遍历 roles
不就行了吗?
{% for member, form in roles.items %}
{{ member }} : {{ form }}
{% endfor %}