我正在尝试将对象添加到购物车,但未添加任何内容。我是Django的新手,不胜感激。我也认为错误与我的cart_update函数有关。在本教程中,这就是我的写作方式,但是当我查找此问题时,发现我应该使用get_object_or_404。当我尝试这种方式时,我仍然无法在购物车中添加对象。
models.py
p1
在此视图中是发生问题的我的cart_update函数。
购物车/views.py
from django.db import models
import os
import random
from django.db.models import Q
from django.db.models.signals import pre_save, post_save
from django.urls import reverse
from django.shortcuts import get_object_or_404
from .utils import unique_slug_generator
def get_filename_ext(filepath):
base_name = os.path.basename(filepath)
name, ext = os.path.splitext(base_name)
return name, ext
def upload_image_path(instance, filename):
new_filename = random.randint(1,233434234)
name, ext = get_filename_ext(filename)
final_filename = '{new_filename}{ext}'.format(new_filename=new_filename, ext=ext)
return "products/{new_filename}/{final_filename}".format(new_filename=new_filename, final_filename=final_filename)
class ProductQuerySet(models.query.QuerySet):
def active(self):
return self.filter(active=True)
def featured(self):
return self.filter(featured=True, active=True)
def search(self,query):
lookups = (Q(title__icontains=query) |
Q(description__icontains=query) |
Q(price__icontains=query) |
Q(tag__title__icontains=query)
)
return self.filter(lookups).distinct()
class ProductManager(models.Manager):
def get_queryset(self):
return ProductQuerySet(self.model, using=self._db)
def all(self):
return self.get_queryset().active()
def featured(self):
return self.get_queryset().featured()
def get_by_id(self,id):
qs = self.get.queryset().filter(id=id)
if qs.count() == 1:
return qs.first()
return None
def search(self,query):
return self.get_queryset().active().search(query)
class Product(models.Model):
title = models.CharField(max_length=120)
slug = models.SlugField(blank=True,unique=True)
description = models.TextField()
price = models.DecimalField(decimal_places=2,max_digits=20,default=10.99)
image = models.ImageField(upload_to='gallery',null=True,blank=True)
featured = models.BooleanField(default=False)
active = models.BooleanField(default=True)
timestamp = models.DateTimeField(auto_now_add=True)
objects = ProductManager()
def get_absolute_url(self):
# return "/products/{slug}/".format(slug=self.slug)
return reverse("products:detail", kwargs={"slug": self.slug})
def __str__(self):
return self.title
def product_pre_save_receiver(sender, instance, *args, **kwargs):
if not instance.slug:
instance.slug = unique_slug_generator(instance)
pre_save.connect(product_pre_save_receiver, sender=Product)
答案 0 :(得分:1)
据我所知,您还可以检查symfony/process
是否出现搜索到的项目...
答案 1 :(得分:0)
您可以在代码中进行一些改进:
1)如果不存在该产品(您可能是product_id
的“硬接线” 1
,则可能是这种情况)使用logging,则有{{1} }语句是不够的。
2)如果产品已经在购物车中,则将其删除,使购物车为空。您也许可以增加数量?
3)条件print
将始终为if product_id in cart_obj.products.all()
False
将返回cart_obj.products.all()
而不是id值的查询集,那里有两个选项:
Product
或
if product_id in cart_obj.products.values_list("id", flat=True)
4)我没有看到您的if product_obj in cart_obj.products.all()
模板,但是在您的视图'carts/home.html'
中,您没有将产品添加到视图上下文中,而且,由于您可以在其中访问产品篮子本身(它们是相关的)中的一个篮子,您不需要行cart_home
。只需将products = cart_obj.products.all()
添加到视图上下文中
cart_obj
并将以下代码写入模板:
def cart_home(request):
cart_obj, new_obj = Cart.objects.new_or_get(request)
return render(request, 'carts/home.html', {"cart": cart_obj})
希望您能在检查其中一种愉快的编码时发现错误!