Django 2.2 TypeError at /cart/checkout __init__() 缺少 1 个必需的位置参数:'request'

雷加

我正在尝试用 Django 制作一个电子商务网站,我一直在关注这个在线课程和文档。

当我更新登录表单以获得更好的用户体验时,我在购物车视图中遇到了一个错误。我认为这很奇怪,因为我没有更改购物车应用程序中的订单或结帐视图中的任何内容。所以这里是完整的回溯:

>Environment:
>
>

>Request Method: GET

>Request URL: root/cart/checkout/
>

>Django Version: 2.2.12

>Python Version: 3.6.9

>Installed Applications:

>['django.contrib.admin',

> 'django.contrib.auth',

> 'django.contrib.contenttypes',

> 'django.contrib.sessions',

> 'django.contrib.messages',

> 'django.contrib.staticfiles',

> 'storages',

> 'accounts',

> 'addresses',

> 'analytics',

> 'billing',

> 'carts',

> 'marketing',

> 'orders',

> 'products',

> 'search',

> 'tags']

>Installed Middleware:

>['django.middleware.security.SecurityMiddleware',

> 'django.contrib.sessions.middleware.SessionMiddleware',

> 'django.middleware.common.CommonMiddleware',

> 'django.middleware.csrf.CsrfViewMiddleware',

> 'django.contrib.auth.middleware.AuthenticationMiddleware',

> 'django.contrib.messages.middleware.MessageMiddleware',

> 'django.middleware.clickjacking.XFrameOptionsMiddleware']
>
>
>
>Traceback:
>
>File "/home/ray/Dev/rxvenv/lib/python3.6/site-packages/django/core/handlers/exception.py" in >inner
>  34.             response = get_response(request)
>
>File "/home/ray/Dev/rxvenv/lib/python3.6/site-packages/django/core/handlers/base.py" in >_get_response
>  115.                 response = self.process_exception_by_middleware(e, request)
>
>File "/home/ray/Dev/rxvenv/lib/python3.6/site-packages/django/core/handlers/base.py" in >_get_response
>  113.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)
>
>File "/home/ray/Dev/rxvenv/src/carts/views.py" in checkout_home
>  79.     login_form = LoginForm()
>
>Exception Type: TypeError at /cart/checkout/

>Exception Value: __init__() missing 1 required positional argument: 'request'

根据回溯,我的错误来自 src/carts/view.py,特别是我对 LoginForm 的调用。这是引发异常的文件,但我省略了一些代码,以免太冗长。

所以当我调用 LoginForm 时错误是导致的。LoginForm 必须是问题的根源,因为这是我上次测试购物车结帐视图以来唯一更改的内容。它一定是我最近的更改之一,所以这里是:


    # src/accounts/forms.py
    from django import forms
    from django.contrib.auth import authenticate, login, get_user_model
    from django.urls import reverse
    from django.utils.safestring import mark_safe

    User = get_user_model()
    class LoginForm(forms.Form):
    email    = forms.EmailField(label='Email')
    password = forms.CharField(widget=forms.PasswordInput)
    # the error is saying "__init__() missing 1 required positional argument: 'request':
    # so that must mean that the error is being caused by a call or this definition
    def __init__(self, request, *args, **kwargs):
        self.request = request
        super(LoginForm, self).__init__(*args, **kwargs)
    def clean(self):
        request = self.request
        data = self.cleaned_data
        email  = data.get("email")
        password  = data.get("password")
        qs = User.objects.filter(email=email)
        if qs.exists():
            # user email is registered, check active/
            not_active = qs.filter(is_active=False)
            if not_active.exists():
                ## not active, check email activation
                link = reverse("account:resend-activation")
                reconfirm_msg = """Go to <a href='{resend_link}'>
                resend confirmation email</a>.
                """.format(resend_link = link)
                confirm_email = EmailActivation.objects.filter(email=email)
                is_confirmable = confirm_email.confirmable().exists()
                if is_confirmable:
                    msg1 = "Please check your email to confirm your account or " + reconfirm_msg.lower()
                    raise forms.ValidationError(mark_safe(msg1))
                email_confirm_exists = EmailActivation.objects.email_exists(email).exists()
                if email_confirm_exists:
                    msg2 = "Email not confirmed. " + reconfirm_msg
                    raise forms.ValidationError(mark_safe(msg2))
                if not is_confirmable and not email_confirm_exists:
                    raise forms.ValidationError("This user is inactive.")


        user = authenticate(request, username=email, password=password)
        if user is None:
            raise forms.ValidationError("Invalid credentials")
        login(request, user)
        self.user = user
        return data


    # src/carts/views.py
    from django.shortcuts import render, redirect


    from accounts.forms import LoginForm, GuestForm
    from accounts.models import GuestEmail

    from addresses.forms import AddressForm
    from addresses.models import Address

    from billing.models import BillingProfile
    from orders.models import Order
    from products.models import Product
    from .models import Cart




    def checkout_home(request):
    cart_obj, cart_created = Cart.objects.new_or_get(request)
    order_obj = None
    if cart_created or cart_obj.products.count() == 0:
        return redirect("cart:home")  


    print('request', request)
    login_form = LoginForm()            #this line is causing an error
    guest_form = GuestForm()
    address_form = AddressForm()
    billing_address_id = request.session.get("billing_address_id", None)
    shipping_address_id = request.session.get("shipping_address_id", None)

    billing_profile, billing_profile_created = BillingProfile.objects.new_or_get(request)
    address_qs = None
    has_card = False
    if billing_profile is not None:
        if request.user.is_authenticated:
            address_qs = Address.objects.filter(billing_profile=billing_profile)
        order_obj, order_obj_created = Order.objects.new_or_get(billing_profile, cart_obj)
        if shipping_address_id:
            order_obj.shipping_address = Address.objects.get(id=shipping_address_id)
            del request.session["shipping_address_id"]
        if billing_address_id:
            order_obj.billing_address = Address.objects.get(id=billing_address_id) 
            del request.session["billing_address_id"]
        if billing_address_id or shipping_address_id:
            order_obj.save()
        has_card = billing_profile.has_card

    if request.method == "POST":
        "check that order is done"
        is_prepared = order_obj.check_done()
        if is_prepared:
            did_charge, crg_msg = billing_profile.charge(order_obj)
            if did_charge:
                order_obj.mark_paid()
                request.session['cart_items'] = 0
                del request.session['cart_id']
                if not billing_profile.user:
                    '''
                    is this the best spot?
                    '''
                    billing_profile.set_cards_inactive()
                return redirect("cart:success")
            else:
                print(crg_msg)
                return redirect("cart:checkout")
    context = {
        "object": order_obj,
        "billing_profile": billing_profile,
        "login_form": login_form,
        "guest_form": guest_form,
        "address_form": address_form,
        "address_qs": address_qs,
        "has_card": has_card
    }
    return render(request, "carts/checkout.html", context)

伊克利纳克

您的LoginForm表单__init__将请求作为位置参数,但您没有提供它

login_form = LoginForm(request)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TypeError:__init __()缺少1个必需的位置参数:'on_delete'(Django 2)

Django Rest Framework,TypeError:__init__() 需要 1 个位置参数,但给出了 2 个

Django: TypeError at /login/ __init__() 需要 1 个位置参数,但给出了 2 个

Django抛出TypeError:_wrapped_view()缺少1个必需的位置参数:'request'

Kivy MDDatePicker - TypeError: __init__() 缺少 1 个必需的位置参数:'callback'

django_podcasting迁移:TypeError:__init __()缺少1个必需的位置参数:'on_delete'

TypeError:detail()缺少1个必需的位置参数:“ request”

错误“ TypeError:FirstForm()缺少1个必需的位置参数:'request'”

Django 自定义 PasswordResetView:__init__() 缺少 1 个必需的位置参数:'user'

基于 Django 分类的视图 __init__() 缺少 1 个必需的位置参数

Scrapy:TypeError:__init __()缺少1个必需的位置参数:'url'

TypeError:__init __()缺少1个必需的位置参数:'id'

TypeError:__init __()缺少1个必需的位置参数:'figure'

缺少1个必需的位置参数:“ request” django restframework

Django-缺少1个必需的位置参数:“ request”

TypeError:answer() 缺少 2 个必需的位置参数:'Poll' 和 'Answers' - django

TypeError:__init __()缺少2个必需的位置参数:'no_of_arrows'和'email'

TypeError:__init __()缺少2个必需的位置参数:“ client_socket”和“ statusMessage”

Flask-TypeError:__init __()缺少2个必需的位置参数:“ name”和“ user_id”

最小化给出 TypeError: bound1Expr() 缺少 2 个必需的位置参数

类型错误:__init__() 缺少 2 个必需的位置参数:“arr”和“n”

Python 错误类型错误:__init__() 缺少 2 个必需的位置参数:和 ctypes

__init__() 缺少 1 个必需的位置参数:'self'

错误:__init__() 缺少 1 个必需的位置参数:'rec'

文件上载AngularJS和Django:/ uploaded_file uploadFile()处的TypeError缺少1个必需的位置参数:'request'

__init __()缺少2个必需的位置参数:'fig'和'func'

尝试覆盖 __init__() 时出错:TypeError: __init__() 采用 1 个位置参数,但给出了 2 个

TypeError at : / __init__() 需要 1 个位置参数,但给出了 2 个

Pytorch: [TypeError: __init__() 需要 1 个位置参数,但给出了 2 个]