Я Django новичок, поэтому я надеюсь, что мой вопрос имеет смысл.
Я пытаюсь понять самые основы того, как работает приложение корзины. Нет сессий. Кроме того, я хотел бы отобразить все на главной странице, чтобы «сводка» заказа всегда была видна и обновлялась на одной странице.
Как я уже сказал, я только учусь 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})
mapped in ' urls.py '(входит в основную' urls.py ')
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home')
]
Я зарегистрировал обе модели в админке, хотя знаю, что корзина не должна быть, но ради тестирования Я создал несколько элементов и несколько заказов.
Теперь в моем шаблоне мне удалось показать элементы, доступные в меню, текущий и, следовательно, последний идентификатор заказа, но я не могу получить доступ к элементам внутри корзины.
Как видно из моего шаблона basi c, переменная cart_items
, которую я определил в представлении и которую я передаю в контексте, возвращает cart.Item.None
, хотя на самом деле это содержит 3 элемента.
это HTML: * 1 029 *
<!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>
Я не знаю, нужно ли к нему обращаться из HTML через Django язык шаблонов или в представлении, передавая переменную в контексте
To Подводя итог, я хотел бы видеть прямо рядом с идентификатором заказа: «число», что-то вроде «Пицца 9.99, Coca Cola 3.5».