簡體   English   中英

如何在 Views.py 中更改添加到購物車功能

[英]How to do a variation in Views.py for add to cart function

  1. 我只需要讓添加到購物車有變化,例如 S、M、L

  2. 這不是 Django Rest Framework 我想只使用 Django

  3. 我沒有變體的表格,如果有錯,你能幫我嗎

  4. 我正在關注 JustDjango Ecommerce,但我正在使用代碼構建自己的網站,並嘗試僅使用 Django 添加一些變體。 不使用 Django Rest Framework

    <--models.py-->

     class Food(models.Model): class NewManager(models.Manager): def get_queryset(self): return super().get_queryset() .filter(avail=True) title = models.CharField(max_length=100) price = models.DecimalField(max_digits=5, decimal_places=2) discount_price = models.FloatField(blank=True, null=True) category = models.ForeignKey(Category,on_delete=models.CASCADE,blank=True,null=True) Package = models.ForeignKey(Pack,on_delete=models.CASCADE,blank=True,null=True) per = models.CharField(choices=PR,max_length=2,blank=True,null=True) top = models.BooleanField(_('Top Selling'),default=False) slug = models.SlugField() description = models.TextField() image = models.ImageField(blank=False,null=False) avail = models.BooleanField(_('Available'),default=True) navail = models.BooleanField(_('Not Available'),default=False) def __str__(self): return self.title class Variation(models.Model): item = models.ForeignKey(Food, on_delete=models.CASCADE) name = models.CharField(max_length=50) # size class Meta: unique_together = ( ('item', 'name') ) def __str__(self): return self.name class ItemVariation(models.Model): variation = models.ForeignKey(Variation, on_delete=models.CASCADE) value = models.CharField(max_length=50) # S, M, L attachment = models.ImageField(blank=True) class Meta: unique_together = ( ('variation', 'value') ) def __str__(self): return self.value class OrderItem(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) ordered = models.BooleanField(default=False) item = models.ForeignKey(Food, on_delete=models.CASCADE) item_variations = models.ManyToManyField(ItemVariation) quantity = models.IntegerField(default=1)

    <--Views.py-->

     @login_required def add_to_cart(request, slug, *args, **kwargs): item = get_object_or_404(Food, slug=slug) variations = Variation.objects.all() minimum_variation_count = Variation.objects.filter(item=item).count() if len(variations) < minimum_variation_count: return redirect("resto:order") order_item_qs = OrderItem.objects.filter( item=item, user=request.user, ordered=False ) for v in variations: order_item_qs = order_item_qs.filter( Q(item_variations__exact=v) ) if order_item_qs.exists(): order_item = order_item_qs.first() order_item.quantity += 1 order_item.save() else: order_item = OrderItem.objects.create( item=item, user=request.user, ordered=False ) order_item.item_variations.add(*variations) order_item.save() order_qs = Order.objects.filter(user=request.user, ordered=False) if order_qs.exists(): order = order_qs[0] if not order.items.filter(item__id=order_item.id).exists(): order.items.add(order_item) return redirect("resto:order") else: ordered_date = timezone.now() order = Order.objects.create( user=request.user, ordered_date=ordered_date) order.items.add(order_item) return redirect("resto:order")

<--錯誤-->

  I add a Variation name "Sugar" just for Example when I click Add to Cart this Error show up.

   ValueError at /add-to-cart/item-1/
   Cannot query "Sugar": Must be "ItemVariation" instance.
       Request Method:  GET
       Request URL: http://127.0.0.1:8000/add-to-cart/item-1/
       Django Version:  2.2
       Exception Type:  ValueError
       Exception Value: Cannot query "Sugar": Must be "ItemVariation" instance.
       Exception Location:  C:\Users\Admin\djangoproj\cafe\cdc\lib\site-packages\django\db\models\sql\query.py in check_query_object_type, line 1065
       Python Executable:   C:\Users\Admin\djangoproj\cafe\cdc\Scripts\python.exe
       Python Version:  3.8.3
       Python Path: 
           ['C:\\Users\\Admin\\djangoproj\\cafe\\src',
           'C:\\Users\\Admin\\djangoproj\\cafe\\cdc\\Scripts\\python38.zip',
           'c:\\users\\admin\\appdata\\local\\programs\\python\\python38-32\\DLLs',
           'c:\\users\\admin\\appdata\\local\\programs\\python\\python38-32\\lib',
           'c:\\users\\admin\\appdata\\local\\programs\\python\\python38-32',
           'C:\\Users\\Admin\\djangoproj\\cafe\\cdc',
           'C:\\Users\\Admin\\djangoproj\\cafe\\cdc\\lib\\site-packages',
          'c:\\users\\admin\\djangoproj\\cafe\\cdc\\src\\django-oscar-cash-on-delivery']
       Server time: Fri, 25 Sep 2020 03:05:29 +0000

錯誤截圖

錯誤截圖(回溯)

我在變化中添加了“糖”

在 ItemVariation

在您的 for 循環下方嘗試替換:

order_item_qs = order_item_qs.filter(
            Q(item_variations__exact=v)
        )

和:

order_item_qs = order_item_qs.filter(item_variations__variation=v)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM