我正在創建一個商店,在執行此地址http://127.0.0.1:8000/carro/agregar/3/時,它必須將產品加載到購物車所在的商店小部件中。如果汽車不在會話中,請創建它。嘗試洗掉cookies,什么也沒有。但是當我在任何產品上按下購買按鈕時,在這種情況下是在產品 3 上,按鈕發送到正確的地址,但頁面給了我以下錯誤
/carro/agregar/3/ 處的 TypeError 無法解壓不可迭代的 int 物件請求方法:GET 請求 URL: http: //127.0.0.1 :8000/carro/agregar/3/ Django 版本:4.0.4 例外型別:TypeError 例外值:無法解壓不可迭代的 int 物件例外位置:C:\Users\HP\AppData\Local\Programs\Python\Python310\lib\site-packages\django\db\models\sql\query.py,第 1374 行,在 build_filter Python 可執行檔案:C:\Users\HP\AppData\Local\Programs\Python\Python310\python.exe Python 版本:3.10.4
還有這個
C:\Users\HP\Documents\ProyectosDjango\ProyectoWeb\carro\views.py,第 8 行,在 agregar_producto
producto = Producto.objects.get(producto_id)
視圖.py
from django.shortcuts import redirect
from .carro import Carro
from tienda.models import Producto
# Create your views here.
def agregar_producto(request, producto_id):
carro= Carro(request)
producto = Producto.objects.get(producto_id)
carro.agregar(producto=producto)
return redirect('Tienda')
def eliminar_producto(request, producto_id):
carro= Carro(request)
producto = Producto.objects.get(producto_id)
carro.eliminar(producto=producto)
return redirect('Tienda')
def restar_producto(request, producto_id):
carro= Carro(request)
producto = Producto.objects.get(producto_id)
carro.restar(producto=producto)
return redirect('Tienda')
def limpiar_carro(request):
carro= Carro(request)
carro.limpiar_carro()
return redirect('Tienda')
context_processor.py
def importe_total_carro(request):
total = 0
if request.user.is_authenticated:
for key, value in request.session["carro"].items():
total = total (float(value['precio'])*value['cantidad'])
return {'importe_total_carro':total}
網址.py
from django.urls import path
from . import views
app_name= "carro"
urlpatterns = [
path('agregar/<int:producto_id>/', views.agregar_producto, name="agregar"),
path('eliminar/<int:producto_id>/', views.eliminar_producto, name="eliminar"),
path('restar/<int:producto_id>/', views.restar_producto, name="restar"),
path('limpiar/>', views.limpiar_carro, name="limpiar"),
]
carro.py(類)
class Carro:
def __init__(self,request):
self.request=request
self.session=request.session
carro = self.session.get("carro")
if not carro:
carro=self.session["carro"]={}
self.session.modified = True
#else:
self.carro = carro
def agregar(self, producto):
print('Estos son los datos {} => {}'.format(self, producto))
if (str(producto.id) not in self.carro.keys()):
self.carro[producto.id]={
"producto.id":producto.id,
"nombre":producto.nombre,
"precio":str(producto.precio),
"cantidad":1,
"imagen":producto.imagen.url
}
else:
for key, value in self.carro.items():
if key == str(producto.id):
value["cantidad"] = value["cantidad"] 1
break
self.guardar_carro()
def guardar_carro(self):
self.session["carro"] = self.carro
self.session.modified = True
def eliminar(self, producto):
producto.id= str(producto.id)
if producto.id in self.carro.keys():
del self.carro[producto.id]
self.guardar_carro()
def restar_producto(self,producto):
for key, value in self.carro.items():
if key == str(producto.id):
value["cantidad"] = value["cantidad"] - 1
if value["cantidad"] < 1:
self.eliminar(producto)
break
self.guardar_carro()
def limpiar_carro(self):
self.session["carro"]={}
self.session.modified = True
tienda.html
{% extends "ProyectoWebApp/base.html" %}
{% load static %}
{% block content %}
<div class="container">
<div style="float:right; margin-left: 10px;">
{% include "carro/widget.html" %}
</div>
<div class="row ">
{% for Prod in productos %}
<div class="col-sm-4" > <!--style="padding: 10px; -->
<div hljs-string">" style="width: 15rem;margin: 5px 5px;"> <!--style="padding: 10px; -->
<img class="card-img-top" src="{{Prod.imagen.url}}" height="160px" alt="Card image cap">
<div class="card-body">
<h5 class="card-title">{{Prod.nombre}}</h5>
<p class="card-text">{{Prod.precio}}</p>
<a href="{% url 'carro:agregar' Prod.id %}" class="btn btn-primary">comprar</a>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
{% endblock %}
小部件carrito
<table class="table table-bordered" style="color:white">
<thead>
<tr>
<th colspan="3" class="tex-center">
Carro compras
</th>
</tr>
<tr>
<th>Producto</th>
<th>Cantidad</th>
<th>Suma</th>
</tr>
</thead>
<tbody>
{% if request.session.carro.items %}
{% for key,value in request.session.carro.items %}
<tr class="text-center">
<td>{{value.nombre}}</td>
<td>{{value.cantidad}}</td>
<td>
<a href="{% url 'carro:agregar' value.producto_id %}" class="btn btn-sm btn-succes"> </a>
<a href="{% url 'carro:restar' value.producto_id %}" class="btn btn-sm btn-danger">-</a><br>
$ {{value.precio}}
</td>
</tr>
{% endfor %}
{% else %}
<tr>
<td colspan="3">
<div class="alert alert-danger text=center" >Carro Vacio</div>
</td>
</tr>
{% endif %}
</tbody>
<tfoot>
<tr>
<td colspan="3">
> Total: {{importe_total_carro}}
</td>
</tr>
</tfoot>
模型.py
from http.client import PRECONDITION_FAILED
from django.db import models
# Create your models here.
class CategoriaProd(models.Model):
nombre = models.CharField(max_length=50)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name = 'categoriaProd'
verbose_name_plural= 'categoriasProd'
def __str__(self):
return self.nombre
class Producto(models.Model):
nombre = models.CharField(max_length=50)
precio = models.FloatField()
imagen =models.ImageField(upload_to='tienda', null=True, blank=True)
categorias = models.ForeignKey(CategoriaProd, on_delete=models.CASCADE)
disponibilidad = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name = 'producto'
verbose_name_plural= 'productos'
def __str__(self):
return self.nombre
uj5u.com熱心網友回復:
您不能只將單個整數位置引數傳遞給getorfilter函式,您需要傳遞關鍵字引數,其中鍵是要過濾的欄位的名稱。
如果您要傳遞id實體,則使用“id”作為關鍵字引數
producto = Producto.objects.get(id=producto_id)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/473004.html
上一篇:如何檢查*open*用戶桌面會話
