Hey Leute, ich bin neu bei Django und in meinem ersten Projekt versuche ich, den
Warenkorb eines Besuchers in einer
Sitzung zu
speichern Wenn ich versuche, ein
Produkt in den Warenkorb einer Sitzung zu
hinzufügen, erhalte ich die folgende Fehlermeldung: < WSGIRequest-Objekt hat kein Attribut „get“
Ich verwende in meinem Projekt eine Klasse für den Warenkorb und überprüfe in init, ob 'cart' existiert in der Sitzung oder nicht, dann erstellen Sie einen Schlüssel für 'cart' wie folgt:
in der Klasse Cart:
Code: Select all
class Cart:
def __init__(self, request):
"""
Initialize The Cart
"""
self.request = request
self.session = request.session
cart = self.session.get('cart')
if not cart:
cart = self.session['cart'] = {}
self.cart = cart
# add a product to session cart:
def add(self, product, quantity=1):
"""
Add The Specified Product To The Cart If Exists
"""
product_id = str(product.id)
if product_id not in self.cart:
self.cart[product_id] = {'quantity': quantity}
else:
self.cart[product_id]['quantity'] += quantity
self.save()
Ich verwende auch
eine andere Möglichkeit, um zu überprüfen, ob „Warenkorb“ in der Sitzung vorhanden ist:
Code: Select all
if 'cart' not in request.session:
self.cart = self.session['cart'] = {}
und habe immer noch das gleiche Problem...
Formular für die Verwendung des Warenkorbs:
Code: Select all
class AddToCartProductForm(forms.Form):
QUANTITY_CHOICES = [(i, str(i)) for i in range(1, 30)]
quantity = forms.TypedChoiceField(choices=QUANTITY_CHOICES, coerce=int, label=_('Quantity'))
Ansicht:
Code: Select all
def add_to_cart_view(request, product_id):
cart = Cart(request)
product = get_object_or_404(Product, id=product_id)
form = AddToCartProductForm(request)
if form.is_valid():
cleaned_data = form.cleaned_data
quantity = cleaned_data['quantity']
cart.add(product, quantity)
return redirect('cart:cart-detail')
URL-Datei:
Code: Select all
urlpatterns = [
path('', views.cart_detail_view, name='cart-detail'),
path('add/', views.add_to_cart_view, name='add-to-cart')
]
in der HTML-Datei:
Code: Select all
{% csrf_token %}
{{ add_to_cart_form|crispy }}
{% trans 'Add To Card' %}
und wenn ich auf die Schaltfläche „Zum Warenkorb hinzufügen“ klicke, wird dieser Fehler angezeigt:
Das Objekt „WSGIRequest“ hat kein Attribut „get“. Ich denke, der Fehler liegt daran die
init-Methode im Warenkorb, mit der ich die Existenz von „
cart“ in der Sitzung überprüfe. Wie kann ich das beheben?
Hey Leute, ich bin neu bei Django und in meinem ersten Projekt versuche ich, den [b]Warenkorb[/b] eines Besuchers in einer [b]Sitzung[/b] zu [b]speichern[/b] Wenn ich versuche, ein [b]Produkt[/b] in den Warenkorb einer Sitzung zu [b]hinzufügen[/b], erhalte ich die folgende Fehlermeldung: < WSGIRequest-Objekt hat kein Attribut „get“
Ich verwende in meinem Projekt eine Klasse für den Warenkorb und überprüfe in init, ob 'cart' existiert in der Sitzung oder nicht, dann erstellen Sie einen Schlüssel für 'cart' wie folgt:
[b]in der Klasse Cart[/b]:
[code]class Cart:
def __init__(self, request):
"""
Initialize The Cart
"""
self.request = request
self.session = request.session
cart = self.session.get('cart')
if not cart:
cart = self.session['cart'] = {}
self.cart = cart
# add a product to session cart:
def add(self, product, quantity=1):
"""
Add The Specified Product To The Cart If Exists
"""
product_id = str(product.id)
if product_id not in self.cart:
self.cart[product_id] = {'quantity': quantity}
else:
self.cart[product_id]['quantity'] += quantity
self.save()
[/code]
Ich verwende auch [b]eine andere Möglichkeit[/b], um zu überprüfen, ob „Warenkorb“ in der Sitzung vorhanden ist:
[code] if 'cart' not in request.session:
self.cart = self.session['cart'] = {}
[/code]
und habe immer noch das gleiche Problem...
Formular für die Verwendung des Warenkorbs:
[code]class AddToCartProductForm(forms.Form):
QUANTITY_CHOICES = [(i, str(i)) for i in range(1, 30)]
quantity = forms.TypedChoiceField(choices=QUANTITY_CHOICES, coerce=int, label=_('Quantity'))
[/code]
Ansicht:
[code]def add_to_cart_view(request, product_id):
cart = Cart(request)
product = get_object_or_404(Product, id=product_id)
form = AddToCartProductForm(request)
if form.is_valid():
cleaned_data = form.cleaned_data
quantity = cleaned_data['quantity']
cart.add(product, quantity)
return redirect('cart:cart-detail')
[/code]
URL-Datei:
[code]urlpatterns = [
path('', views.cart_detail_view, name='cart-detail'),
path('add/', views.add_to_cart_view, name='add-to-cart')
]
[/code]
in der HTML-Datei:
[code]
{% csrf_token %}
{{ add_to_cart_form|crispy }}
{% trans 'Add To Card' %}
[/code]
und wenn ich auf die Schaltfläche „Zum Warenkorb hinzufügen“ klicke, wird dieser Fehler angezeigt: [b]Das Objekt „WSGIRequest“ hat kein Attribut „get“[/b]. Ich denke, der Fehler liegt daran die [b]init[/b]-Methode im Warenkorb, mit der ich die Existenz von „[b]cart[/b]“ in der Sitzung überprüfe. Wie kann ich das beheben?