我有以下表格,似乎无法使用" self.currentSelectedTeam1"作为team1的初始值,可以在底部看到。当我尝试这个时,我收到以下错误:
team1 = forms.ModelChoiceField(queryset=StraightredTeam.objects.none(), empty_label=None,initial=self.curentSelectedTeam1)
NameError: name 'self' is not defined
形式:
class SelectTwoTeams(BootstrapForm):
def __init__(self, *args, **kwargs):
user = kwargs.pop('user', None)
self.curentSelectedTeam1 = kwargs.pop('curentSelectedTeam1', None)
self.curentSelectedTeam2 = kwargs.pop('curentSelectedTeam2', None)
super(SelectTwoTeams, self).__init__(*args, **kwargs)
queryset = StraightredTeam.objects.filter(currentteam = 1)
self.fields['team1'].queryset = queryset
self.fields['team2'].queryset = queryset
team1 = forms.ModelChoiceField(queryset=StraightredTeam.objects.none(), empty_label=None,initial=self.curentSelectedTeam1)
team2 = forms.ModelChoiceField(queryset=StraightredTeam.objects.none(), empty_label=None,initial=self.curentSelectedTeam2)
非常感谢任何帮助,艾伦。
答案 0 :(得分:2)
由于team1
和team2
字段是在调用__init__
之前创建的,因此它们不起作用,因为它们是实例成员。
这意味着self.curentSelectedTeam1
和self.curentSelectedTeam2
尚不可用,最有可能None
。
为了在表单上设置初始值,您需要在实例化表单本身时这样做。
team1_pk = 0
team2_pk = 1
form = SelectTwoTeams(initial={'curentSelectedTeam1': team1_pk, 'curentSelectedTeam2': team2_pk})
您需要删除当前的__init__
覆盖或调用super()
以允许将初始值传递给表单的默认构造函数。
答案 1 :(得分:2)
问题在于team1和team2变量中的self
关键字。
问题是它们是在类级别上,并且self在实例级别可用(内部方法,不包括静态方法和类方法)
要使其正常工作,您需要对self.fields['team1'].queryset
执行相同操作:
self.fields['team1'].initial = self.curentSelectedTeam1
在__init__
方法内。