django - 添加到购物车功能的 Django 选择字段
问题描述
我有一个带有价格选择字段的应用程序。其中两个类别有一个选项字段。我试图通过在views.py 上使用request.POST.get脚本来获得所需的客户大小以获取价格值,但它没有显示出来。
视图.py
@login_required
def add_to_cart(request, slug):
item = get_object_or_404(Item, slug=slug)
order_item, created = OrderItem.objects.get_or_create(
item=item,
customer=request.user,
ordered=False,
price = request.POST.get('inlineRadioOptions')
)
order_qs = Order.objects.filter(customer=request.user,
ordered=False)
if order_qs.exists():
order = order_qs[0]
if order.items.filter(item__slug=item.slug).exists():
order_item.price = request.POST.get('inlineRadioOptions')
order_item.price
order_item.item_quantity += 1
order_item.save()
messages.success(request,
"This item was updated to your cart."
)
else:
messages.success(request,
"This item was added to your cart."
)
order.items.add(order_item)
order.save()
else:
order = Order.objects.create(
customer=request.user)
order.items.add(order_item)
order.save()
messages.success(request,
"This item was added to your cart."
)
return redirect("featured-food", slug=slug)
在 Views.py 上,我添加了price作为参数并使用脚本request.POST.get('inlineRadioOptions')来获取所选单选按钮的值,但它不起作用。
模型.py
class Item(models.Model):
name = models.CharField(max_length=50)
categories = models.CharField(choices=CATEGORY_CHOICES, max_length=50)
sizes = models.CharField(choices=SIZES_CHOICES, max_length=50, null=True, blank=True)
cake_size = models.CharField(choices=CAKE_CHOICES, max_length=50, null=True, blank=True)
img = models.ImageField(upload_to=get_upload_path, null=True, blank=True)
description = models.TextField()
beverage_s_price = models.FloatField(null=True, blank=True)
beverage_t_price = models.FloatField(null=True, blank=True)
beverage_g_price = models.FloatField(null=True, blank=True)
beverage_v_price = models.FloatField(null=True, blank=True)
cake_slice_price = models.FloatField(null=True, blank=True)
cake_whole_price = models.FloatField(null=True, blank=True)
price = models.FloatField(default=0, null=True, blank=True)
available = models.BooleanField(default=True)
slug= models.SlugField(null=True, blank=True)
def __str__(self):
return str(self.name)
def get_absolute_url(self):
return reverse("featured-food",
kwargs={"slug": self.slug})
def get_add_to_cart_url(self):
return reverse("add-to-cart", kwargs={
'slug': self.slug
})
def get_remove_from_cart_url(self):
return reverse("remove-from-cart", kwargs={
'slug': self.slug
})
def get_add_to_cart_store_page_url(self):
return reverse("add-to-cart-store-page", kwargs={
'slug': self.slug
})
def get_remove_from_cart_store_page_url(self):
return reverse("remove-from-cart-store-page", kwargs={
'slug': self.slug
})
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Item, self).save(*args, **kwargs)
class OrderItem(models.Model):
customer = models.ForeignKey(User, on_delete=models.CASCADE)
item = models.ForeignKey(Item, on_delete=models.CASCADE)
item_quantity = models.IntegerField(default=1)
price = models.FloatField(default=0,null=True, blank=True)
ordered = models.BooleanField(default=False)
def __str__(self):
return f"{self.item_quantity} of {self.item}"
商店.html
<div class="container my-5">
<h1 class="mb-3"><strong>Beverages</strong></h1>
<hr>
<div class="row">
{% for obj in object_list %}
{% if obj.categories == "Beverage" %}
<div class="col-lg-3 col-md-6 my-3 justify-content-center">
<img src="{{ obj.img.url }}" alt="">
</div>
<div class="col-lg-8 col-md-5 my-4 px-5">
<h4><strong>{{obj.name}}</strong></h4>
<p>{{obj.description|truncatechars:200}}</p>
{% if obj.categories == "Beverage" %}
<form method="POST" action="{{ obj.get_add_to_cart_store_page_url }}">
{% csrf_token %}
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio1" value="{{obj.beverage_s_price}}" checked>
<label class="form-check-label" for="inlineRadio1"><strong>Small </strong>₱ {{obj.beverage_s_price|floatformat:2 }}</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio2" value="{{obj.beverage_t_price}">
<label class="form-check-label" for="inlineRadio2"><strong>Tall </strong>₱ {{obj.beverage_t_price|floatformat:2 }}</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio3" value="{{obj.beverage_g_price}}">
<label class="form-check-label" for="inlineRadio3"><strong>Grande </strong>₱ {{obj.beverage_g_price|floatformat:2 }}</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio4" value="{{obj.beverage_v_price}}">
<label class="form-check-label" for="inlineRadio4"><strong>Venti </strong>₱ {{obj.beverage_v_price|floatformat:2 }}</label>
</div>
{% endif %}
{% if obj.categories == "Cake" %}
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio5" value="{{obj.cake_slice_price}}">
<label class="form-check-label" for="inlineRadio5"><strong>Slice </strong>₱ {{obj.cake_slice_price|floatformat:2 }}</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio6" value="{{obj.cake_whole_price}}">
<label class="form-check-label" for="inlineRadio6"><strong>Whole </strong>₱ {{obj.cake_whole_price|floatformat:2 }}</label>
</div>
{% endif %}
{% if obj.categories != "Beverage" and obj.categories != "Cake" %}
<div class="">
<h6>₱ {{obj.price}}</h6>
</div>
{% endif %}
<div class="mt-2">
<small class="ml-5">Add to cart</small>
<button type="submit" class="btn btn-primary btn-md my-0 p"><i class="fas fa-plus"></i></a></button>
<a href="{{ obj.get_remove_from_cart_store_page_url }}" class="btn btn-danger btn-md my-0 p">
<i class="fas fa-minus"></i></a>
</div>
</form>
</div>
<hr>
{% endif %}
{% endfor %}
</div>
</div>
解决方案
推荐阅读
- sql-server - 为什么我有这些联系?
- postgresql - PostgreSQL 无法连接到服务器:连接被拒绝
- elixir - Elixir 在两个列表中找到第一个匹配元素
- jenkins - 使用 SSH 连接运行命令时无法签署 App Store IPA
- javascript - TSLint 错误“在这个简单的迭代中,期望一个 'for-of' 循环而不是一个 'for' 循环”
- amazon-web-services - 如何从 CloudFormation 中的 Elastic Beanstalk 环境中提取负载均衡器名称
- eclipse - Eclipse 数据源资源管理器缺少连接配置文件
- go - 如何为每个组选择最接近给定时间的数据
- python - 在 MongoDB 中创建集合和删除集合的语法是什么?
- python - 堆栈和优化——来自hackerrank的例子