【发布时间】:2020-09-16 14:25:49
【问题描述】:
在 html 文件中,我尝试呈现“删除”按钮。如果我只是打印出{{combo}} 它会呈现出来。但是,如果我尝试根据购物车模型查询它,它不会呈现按钮。我也试过像 {% if combo in cart.combo_item.combo.all %} 这样查询它,但没有用。
update-cart.html
<form method="POST" action="{% url 'carts:combo_add_to_cart' %}" class="form">
{% csrf_token %}
<input type="hidden" name="combo_id" value="{{ combo.id }}">
<button type="submit" class="btn btn-success">Add to Cart</button>
{% if combo in cart.combo_item.all %}
<button type="submit" class="btn btn-success">Remove?</button>
{% endif %}
</form>
{{combo}}
cart.models
class ComboCartItem(models.Model):
user = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE)
combo = models.ForeignKey(Combo, blank=True, null=True, on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)
ordered = models.BooleanField(default=False)
def __str__(self):
return f"{self.quantity} of {self.combo.combo}"
class Cart(models.Model):
user = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE)
combo_item = models.ManyToManyField(ComboCartItem, blank=True, null=True)
addon_item = models.ManyToManyField(AddonCartItem, blank=True, null=True)
ordered = models.BooleanField(default=False)
cart_total = models.DecimalField(default=0.00, max_digits=100, decimal_places=2)
objects = CartManager()
def __str__(self):
return str(self.id)
combo.models
class Combo(models.Model):
title = models.CharField(max_length=120)
combo_regular_price = models.DecimalField(decimal_places=2, max_digits=10, default=0.00)
combo_sale_price = models.DecimalField(decimal_places=2, max_digits=10, default=0.00)
timestamp = models.DateTimeField(auto_now_add=True)
slug = models.SlugField(blank=True, null=True)
active = models.BooleanField(default=True)
objects = ComboManager()
def __str__(self):
return self.title
views.py
class ComboList(ListView):
template_name = 'products/list.html'
def get_context_data(self, *args, **kwargs):
context = super(ComboList, self).get_context_data(*args, **kwargs)
cart_obj, new_obj = Cart.objects.new_or_get(self.request)
context['cart'] = cart_obj
return context
def get_queryset(self, *args, **kwargs):
request = self.request
combo = Combo.objects.all()
return combo
【问题讨论】:
标签: django django-models django-views django-templates render