我正在尝试使用django模型中的值,但是我在代码中遗漏了一些东西,我无法弄清楚它是什么。
我正在使用django 1.11
我是否需要表单类来继承请求?如果,我该怎么做?
from django import forms
from .models import Profile
from django.contrib.auth.models import User
from django.shortcuts import render
class form(forms.Form):
department_string = ((user.profile.departnemt_1_number, 'Afd A',), ('2', 'Afd B',),)
afdeling = forms.ChoiceField(widget=forms.RadioSelect, choices=department_string, initial='1')
我得到:异常值:名称'user'未定义
非常感谢任何帮助!
答案 0 :(得分:2)
你不能在那时定义它;在定义表单的范围内,范围内没有user
。
您需要覆盖表单的__init__
方法,以接受用户提供的额外关键字参数,并相应地修改选项。
class MyForm(forms.Form):
afdeling = forms.ChoiceField(widget=forms.RadioSelect, initial='1')
def __init__(self, *args, **kwargs):
user = kwargs.pop('user')
super(MyForm, self).__init__(*args, **kwargs)
self.fields['afdeling'].choices = ((user.profile.departnemt_1_number, 'Afd A',), ('2', 'Afd B',),)
不要忘记从视图中传递用户:
if request.method == 'POST':
form = MyForm(request.POST, user=request.user)
...
else:
form = MyForm(request.POST, user=request.user)
...