テンプレートに送信するビューで、フォームのリストを変数として保存しています。
テンプレート内のフォームのリストを繰り返すと、エラーが発生します
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)
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 %}
アップデート
その特定のエラーは、フォームにuser_typeを指定しなかったためinitial
です。
する必要があります:
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 %}
動作せず、エラーをスローしません。存在しないロール['メンバー']を探しているだけだと思います。