无法显示类别(Django)上的购物车数据库



我有这三个模型

class Category(models.Model):
name = models.CharField(max_length=255, blank=True, null=True)
details = models.CharField(max_length=500, blank=True, null=True)
photo= models.ImageField(upload_to = 'image/', default = 'None/no-img.jpg')
create_date = models.DateTimeField(auto_now_add=True, blank=True)
def __str__(self):
return self.name

类别具有的数据

-------
name
-------
1 Clothing
2 Electronics
3 Phones
4 Books
5 Home decors
------------
class Item(models.Model):
item_name = models.CharField(max_length=255, blank=True, null=True)
local_name = models.CharField(max_length=255, blank=True, null=True)
scientific_name = models.CharField(max_length=255, blank=True, null=True)
c_id = models.ForeignKey(Category, related_name='c_id_typtype', on_delete=models.CASCADE) 
short_details = models.CharField(max_length=500, blank=True, null=True)
def __str__(self):
return self.name

项目具有数据类型

-------
item_name          category(fk)
-------
1. Levies jeans       1(Clothing)
2. UCB T-shirts       1(Clothing)   
3. Samsung M10 Phone  3(Phones)   
4. ASUS T123 Phone    3(Phones)
...
...
------------
class DisplayCart(models.Model):
item_id = models.ForeignKey(Item, related_name='cart_item',blank=True, null=True, on_delete=models.CASCADE)
category_id = models.ForeignKey(Category, related_name='cart_cat',blank=True, null=True, on_delete=models.CASCADE)
user_id = models.ForeignKey(User, related_name='cart_user_id',blank=True, null=True, on_delete=models.CASCADE)
quantity = models.CharField(max_length=50,blank=True, null=True)
cart_item_updated_date = models.CharField(max_length=50,blank=True, null=True)
updated_date = models.DateTimeField(auto_now=True)
create_date = models.DateTimeField(auto_now_add=True, blank=True)
def __str__(self):
return self.item_id.item_name

显示购物车具有具有以下user_id类型的数据

-----------------------------------
item_id         category_id qty   user_id
-----------------------------------
1(Levies jeans)     1       2   32
2(Samsung M10)      3       1   32
...
...
----------------------------------

这是我的视图部分

def showcart(request):
categories = Category.objects.all()
items = Item.objects.all()
loginuser = request.user.id
cart_items = DisplayCart.objects.all().filter(user_id=loginuser)
print("C users ...."+ str(cart_items))
context = {"home": "active", "categories":categories,  "items":items, "cart_items":cart_items}

return render(request,'cart_checkout/cart.html', context)

我正在尝试根据模板中的类别格式显示购物车(user_id共 32 个(,如下所示

-------------------
Clothing    qty
-------------------
Levis Jeans     2
-------------------
Phones        qty
-------------------
Samsung m10    1

但它像这样显示(想要删除其他类别(

-------------------
Clothing    qty
-------------------
Levis Jeans     2
-------------------
Electronics qty
-------------------
-------------------
Phones        qty
-------------------
Samsung m10    1
-------------------
Books         qty
-------------------
Home decors    qty
-------------------

这是我的购物车模板视图.html

{% for cat in categories %}

<h3>{{cat.name}}</h3>  
{% for cartdata in cart_items %}

{% if cat.id == cartdata.categories.id %}
<ul>
<li>{{cartdata.items.item_name}}</li>
<li>{{cartdata.quantity}}</li>
</ul>
...
{% endif %}
{% endfor %}   
{% endfor %} 

我尝试了很多逻辑并检查了相关问题,但不起作用

您可以筛选类别以仅显示具有显示项的类别。例如:

def showcart(request):
items = Item.objects.all()
loginuser = request.user.id
cart_items = DisplayCart.objects.all().filter(user_id=loginuser)
categories = Category.objects.filter(pk__in=cart_items.values_list('category_id_id', flat=True))

最新更新