如何在django模板中输出表单字典



我将表单列表保存为视图中的变量,并将其发送到模板。

当我迭代模板中的表单列表时,它会给我错误

AttributeError:"long"对象没有属性"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)

账户/模型.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})

然而,我仍然有为每个工作人员吐出表单的问题,因为我不能在模板中引用变量作为字典键:

if:

roles = {}
for member in staff:
  roles[member] = StaffUserTypeForm(initial={'user_type':member.user.userprofile.user_type})

我找不到具体工作人员的表格:

{% for member in staff %}
{{roles.member}}
{% endfor %}

不起作用,也不会引发错误。我认为,它只是看起来像是不存在的角色。

既然roles字典包含成员(作为键)和形式(作为值),为什么需要遍历staff?只需迭代roles

{% for member, form in roles.items %}
    {{ member }} : {{ form }}
{% endfor %}

最新更新