0

Как отображать несколько продуктов, которые находятся в корзине в шаблон панели. Я пишу CBV для определенного идентификатора Cart, но он не отображает весь продукт, но отображает только тот, который добавлен первым в корзину. Даже в admin отображается только один продукт. Я хочу отображать все товары в корзине. Поэтому его легко проверить, какие заказчики продукта заказали.Django: Как отобразить несколько продуктов из корзины в шаблоне

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", но он возвращается с ошибкой «объектом .product "не повторяется. В окне списка отображаются все элементы корзины из модели CartItem. Есть ли способ сделать это?

+2

Можете ли вы показать модель CartItem? – Gocht

ответ

3

Вы не должны использовать 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 %} 
+0

Как написать запрос для этого. Я застрял только в этой части. –

+0

Вы можете использовать любое другое представление для этого, попробовать шаблон или что-то интересное, и в вас get_context_data выполните запрос, например context ['product'] = Product.objects.all() и верните контекст – gamer

+0

см. Мой обновленный ответ – gamer