Django表单 - 传递价值观

时间:2016-09-11 20:13:51

标签: python django

我有以下表格,似乎无法使用" 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)

非常感谢任何帮助,艾伦。

2 个答案:

答案 0 :(得分:2)

由于team1team2字段是在调用__init__之前创建的,因此它们不起作用,因为它们是实例成员。

这意味着self.curentSelectedTeam1self.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__方法内。