Python 我能';t在forms.py中使用我的django模型值。我得到:name';用户';没有定义
我试图使用django模型中的值,但是我的代码中缺少了一些东西,我无法理解它是什么 我正在使用django 1.11 我是否需要表单类来继承请求?如果是这样,我该怎么做Python 我能';t在forms.py中使用我的django模型值。我得到:name';用户';没有定义,python,django,Python,Django,我试图使用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): depar
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')
I get:异常值:未定义名称“user”
非常感谢您的帮助 在那一点上你不能定义它;在定义表单的位置,范围内没有
用户
您需要重写表单的\uuuuu init\uuuu
方法,以接受用户提供的额外关键字参数,并适当修改选项
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)
...
在那一点上你不能定义它;在定义表单的位置,范围内没有
用户
您需要重写表单的\uuuuu init\uuuu
方法,以接受用户提供的额外关键字参数,并适当修改选项
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)
...
谢谢为什么我称之为超级方法?它不是用来从继承的类调用init方法吗?覆盖init方法是什么意思?以前有吗?是的,它用于从继承类调用方法,这正是您在这里要做的。谢谢!为什么我称之为超级方法?它不是用来从继承的类调用init方法吗?覆盖init方法是什么意思?以前有吗?是的,它用于从继承的类调用方法,这正是您在这里要做的。