Django view Formview.get()执行两次表单初始化代码,这是正确的方法吗?

Django view Formview.get()执行两次表单初始化代码,这是正确的方法吗?,django,django-forms,Django,Django Forms,当django为视图提供服务时,将使用表单类UserRegisterForm(forms.form),并且该表单的init函数将执行两次 我无法确定为什么表单要执行两次 RegisterView覆盖FormView提供的get()函数。 如果我注释掉get函数,表单将正确返回,UserRegisterForm的init函数只执行一次 class RegisterView(generic.FormView): template_name = 'dl_user/register.html'

当django为视图提供服务时,将使用表单类UserRegisterForm(forms.form),并且该表单的init函数将执行两次

我无法确定为什么表单要执行两次

RegisterView覆盖FormView提供的get()函数。 如果我注释掉get函数,表单将正确返回,UserRegisterForm的init函数只执行一次

class RegisterView(generic.FormView):
    template_name = 'dl_user/register.html'
    form_class = UserRegisterForm
    success_url = reverse_lazy('dl_user:register_success')
    def get(self, request):
        request.session._get_or_create_session_key()
        prices_json = json.dumps(settings.prices, cls=DjangoJSONEncoder)
        context = {
            'form': self.form_class,
            'prices': prices_json,
        }
        request.session['prices'] = prices_json
        return render(request, self.template_name, context)
RegesterView呈现UserRegisterForm

class UserRegisterForm(forms.Form):

    request = None
    payment_method = forms.TypedChoiceField(
                                        choices=payment.getPaymentOptions(),
                                        coerce=lambda x: str(x),
                                        widget=forms.Select,
                                        initial='1',
                                        required=True)

    payment_amount = forms.DecimalField(required=True, max_digits=100, decimal_places=8)
    # mandatory schema fields during registration
    username = forms.CharField(required=True,
                               min_length=3,
                               max_length=30,
                               help_text='Choose a memorable name e.g jdoe',
                               validators=[UnicodeUsernameValidator()])

    password = forms.CharField(widget=forms.PasswordInput, min_length=8)
    password1 = forms.CharField(widget=forms.PasswordInput, min_length=8, label='Confirm Password')


    def __init__(self, *args, **kwargs):
        self.request = kwargs.get('request')
        if 'request' in kwargs:
            del kwargs['request']
        super(UserRegisterForm, self).__init__(*args, **kwargs)
        self.ldap_ops = LDAPOperations()

        self.helper = FormHelper()
        self.helper.form_id = 'id-user-data-form'
        self.helper.form_method = 'post'
        # self.helper.form_action = 'register'
        self.helper.add_input(Submit('submit', 'Submit', css_class='btn-success'))
        self.helper.form_class = 'form-horizontal'
        self.helper.label_class = 'col-md-2'
        self.helper.field_class = 'col-md-8'
        self.helper.error_text_inline = False
        self.helper.layout = Layout(
                                    Fieldset('Login Details',
                                             'username', 'password', 'password1'),
                                    )


        self.helper.layout.append(
                Fieldset('Payment',
                    Field('membership_in_days', onclick="updatePrice(value);"),
                    Field('payment_method', onclick="updatePaymentMethod(value)"),
                    Field('payment_amount', readonly=True),
                )
            )

我希望表单能够正确加载,而不需要UserRegisterForm。init执行两次。

覆盖get\u context\u数据,而不是get solution我的问题。 这里的描述和示例是我基于以下内容编写代码的:

欢迎来到stack overflow,我建议您阅读有关堆栈溢出的概念。如果你的问题是有用的,它将为成千上万的人阅读,不要把他们的时间浪费在不必要的代码行上:)