Django:如何在模板中显示购物车中的多个产品
Django: How to display multiple products from cart in template
如何将购物车中的多个产品显示到仪表板模板中。我已经为特定的购物车 ID 编写了 CBV,但它不显示所有产品,而是只显示第一个添加到购物车的产品。即使在管理员中也只显示一种产品。我想显示购物车中的所有产品。因此很容易检查客户订购了哪些产品。
views.py
class MyadminCartItemDetailView(DetailView):
model = CartItem
template_name = "mydashboard/cart/cartitem_detail.html"
def get_context_data(self, *args, **kwargs):
context = super(MyadminCartItemDetailView, self).get_context_data(*args, **kwargs)
return context
cartitem_detail.html
<table class="table table-hover">
<thead>
<tr>
<th>Cart ID</th>
<th>Cart Items</th>
<th>Baker Name</th>
<th>Product Price</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ object.cart }}</td>
<td>{{ object.product }}</td>
<td>{{ object.product.baker }}</td>
<td>{{ object.product.price }}</td>
</tr>
</tbody>
</table>
models.py
class CartItem(models.Model):
cart = models.ForeignKey('Cart', null=True, blank=True)
product = models.ForeignKey(Product)
variations = models.ManyToManyField(Variation, null=True, blank=True)
quantity = models.IntegerField(default=1)
line_total = models.DecimalField(default=10.99, max_digits=1000, decimal_places=2)
notes = models.TextField(null=True, blank=True)
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
updated = models.DateTimeField(auto_now_add=False, auto_now=True)
def __unicode__(self):
return self.product.title
def get_absolute_url(self):
return reverse('cart_item_detail', kwargs={"id": self.id})
class Cart(models.Model):
total = models.DecimalField(max_digits=100, decimal_places=2, default=0.00)
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
updated = models.DateTimeField(auto_now_add=False, auto_now=True)
active = models.BooleanField(default=True)
def __unicode__(self):
return "Cart id: %s" %(self.id)
我尝试迭代 "object.product",但返回错误 "object.product" 不可迭代。列表视图将显示模型 CartItem 中的所有购物车项目。有什么办法吗?
您不应在此处使用 DetailView。 Detai View 是针对特定的单品。您不能在产品的详细信息视图中进行迭代。
如果您想使用多个产品,请在 get_context_data 中进行查询并将上下文发送到模板并在那里进行迭代。
class MyadminCartItemDetailView(TemplateView):
template_name = "mydashboard/cart/cartitem_detail.html"
def get_context_data(self, *args, **kwargs):
context = super(MyadminCartItemDetailView, self).get_context_data(*args, **kwargs)
context['products'] = CartItem.objects.all()
return context
并在您的模板中像这样使用它
{% for product in products %}
{{product.id}}
{{product.title}} # Fields related to product
{% endfor %}
如何将购物车中的多个产品显示到仪表板模板中。我已经为特定的购物车 ID 编写了 CBV,但它不显示所有产品,而是只显示第一个添加到购物车的产品。即使在管理员中也只显示一种产品。我想显示购物车中的所有产品。因此很容易检查客户订购了哪些产品。
views.py
class MyadminCartItemDetailView(DetailView):
model = CartItem
template_name = "mydashboard/cart/cartitem_detail.html"
def get_context_data(self, *args, **kwargs):
context = super(MyadminCartItemDetailView, self).get_context_data(*args, **kwargs)
return context
cartitem_detail.html
<table class="table table-hover">
<thead>
<tr>
<th>Cart ID</th>
<th>Cart Items</th>
<th>Baker Name</th>
<th>Product Price</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ object.cart }}</td>
<td>{{ object.product }}</td>
<td>{{ object.product.baker }}</td>
<td>{{ object.product.price }}</td>
</tr>
</tbody>
</table>
models.py
class CartItem(models.Model):
cart = models.ForeignKey('Cart', null=True, blank=True)
product = models.ForeignKey(Product)
variations = models.ManyToManyField(Variation, null=True, blank=True)
quantity = models.IntegerField(default=1)
line_total = models.DecimalField(default=10.99, max_digits=1000, decimal_places=2)
notes = models.TextField(null=True, blank=True)
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
updated = models.DateTimeField(auto_now_add=False, auto_now=True)
def __unicode__(self):
return self.product.title
def get_absolute_url(self):
return reverse('cart_item_detail', kwargs={"id": self.id})
class Cart(models.Model):
total = models.DecimalField(max_digits=100, decimal_places=2, default=0.00)
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
updated = models.DateTimeField(auto_now_add=False, auto_now=True)
active = models.BooleanField(default=True)
def __unicode__(self):
return "Cart id: %s" %(self.id)
我尝试迭代 "object.product",但返回错误 "object.product" 不可迭代。列表视图将显示模型 CartItem 中的所有购物车项目。有什么办法吗?
您不应在此处使用 DetailView。 Detai View 是针对特定的单品。您不能在产品的详细信息视图中进行迭代。
如果您想使用多个产品,请在 get_context_data 中进行查询并将上下文发送到模板并在那里进行迭代。
class MyadminCartItemDetailView(TemplateView):
template_name = "mydashboard/cart/cartitem_detail.html"
def get_context_data(self, *args, **kwargs):
context = super(MyadminCartItemDetailView, self).get_context_data(*args, **kwargs)
context['products'] = CartItem.objects.all()
return context
并在您的模板中像这样使用它
{% for product in products %}
{{product.id}}
{{product.title}} # Fields related to product
{% endfor %}