Как отобразить на HTML список объектов (ManyToMany), который является атрибутом класса - PullRequest
0 голосов
/ 15 января 2020

Я 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 элемента.

enter image description here

это 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».

1 Ответ

1 голос
/ 15 января 2020
<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()
...