如何在 HTML 上显示属于 class 属性的对象列表 (ManyToMany)
How display on an HTML a list of objects (ManyToMany) that is a class attribute
我是 Django 初学者,所以我希望我的问题是有道理的。
我正在尝试了解购物车应用程序工作原理的基础知识。不涉及会话。另外,我想在主页上显示所有内容,以便订单 'summary' 始终在一页上可见和更新。
正如我所说,我刚开始学习 Django,所以我创建了两个模型,Item 和 Cart
'models.py'
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Item(models.Model):
name = models.CharField(max_length=25)
price = models.DecimalField(max_digits=5, decimal_places=2)
def __str__(self):
return self.name
class Cart(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
items = models.ManyToManyField(Item)
total = models.DecimalField(max_digits=5, decimal_places=2)
def __str__(self):
return 'Order number: %s' % self.id
'views.py'
中的主页视图
from django.shortcuts import render
from .models import Cart, Item
# Create your views here.
def home(request):
items = Item.objects.all()
carts = Cart.objects.all()
length = len(Cart.objects.all())
cart = carts[length - 1]
cart_items = cart.items
return render(request, 'cart/home.html', {'cart': cart,
'items': items,
'cart_items': cart_items})
映射在'urls.py'中(包含在主'urls.py'中)
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home')
]
我已经在管理员中注册了这两个模型,尽管我知道购物车不应该,但是为了测试,我创建了一些项目和一些订单。
现在在我的模板上,我已经成功地显示了菜单中可用的项目、当前的以及最后的订单 ID,但我无法访问购物车中的项目。
正如您从我的基本模板中看到的,我在视图中定义并在上下文中传递的 cart_items
变量 return cart.Item.None
,尽管它实际上包含 3 个项目。
这是 HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Home page</title>
</head>
<body>
<div><h1>Menu</h1></div>
{% for item in items %}
<ul>{{ item }}</ul>
{% endfor %}
<div><h1>Order</h1></div>
{{ cart }}
{{ cart_items }}
</body>
</html>
我不知道是否必须通过 Django 模板语言从 HTML 访问,或者在视图中通过在上下文中传递变量来访问
总而言之,我想在订单 ID 旁边看到:'the number',类似于 'Pizza 9.99, Coca Cola 3.5'。
<div><h1>Order</h1></div>
<div>{{ cart }}</div>
{% for item in cart_items %}
<ul>{{ item.name }} {{ item.price }}</ul>
{% endfor %}
更新:
你也需要重塑你的观点
cart_items = cart.items.all()
我是 Django 初学者,所以我希望我的问题是有道理的。
我正在尝试了解购物车应用程序工作原理的基础知识。不涉及会话。另外,我想在主页上显示所有内容,以便订单 'summary' 始终在一页上可见和更新。
正如我所说,我刚开始学习 Django,所以我创建了两个模型,Item 和 Cart
'models.py'
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Item(models.Model):
name = models.CharField(max_length=25)
price = models.DecimalField(max_digits=5, decimal_places=2)
def __str__(self):
return self.name
class Cart(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
items = models.ManyToManyField(Item)
total = models.DecimalField(max_digits=5, decimal_places=2)
def __str__(self):
return 'Order number: %s' % self.id
'views.py'
中的主页视图from django.shortcuts import render
from .models import Cart, Item
# Create your views here.
def home(request):
items = Item.objects.all()
carts = Cart.objects.all()
length = len(Cart.objects.all())
cart = carts[length - 1]
cart_items = cart.items
return render(request, 'cart/home.html', {'cart': cart,
'items': items,
'cart_items': cart_items})
映射在'urls.py'中(包含在主'urls.py'中)
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home')
]
我已经在管理员中注册了这两个模型,尽管我知道购物车不应该,但是为了测试,我创建了一些项目和一些订单。
现在在我的模板上,我已经成功地显示了菜单中可用的项目、当前的以及最后的订单 ID,但我无法访问购物车中的项目。
正如您从我的基本模板中看到的,我在视图中定义并在上下文中传递的 cart_items
变量 return cart.Item.None
,尽管它实际上包含 3 个项目。
这是 HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Home page</title>
</head>
<body>
<div><h1>Menu</h1></div>
{% for item in items %}
<ul>{{ item }}</ul>
{% endfor %}
<div><h1>Order</h1></div>
{{ cart }}
{{ cart_items }}
</body>
</html>
我不知道是否必须通过 Django 模板语言从 HTML 访问,或者在视图中通过在上下文中传递变量来访问
总而言之,我想在订单 ID 旁边看到:'the number',类似于 'Pizza 9.99, Coca Cola 3.5'。
<div><h1>Order</h1></div>
<div>{{ cart }}</div>
{% for item in cart_items %}
<ul>{{ item.name }} {{ item.price }}</ul>
{% endfor %}
更新:
你也需要重塑你的观点
cart_items = cart.items.all()