Как добавить другие виды и модели в общий c подробный вид в Django - PullRequest
0 голосов
/ 04 мая 2020

Я создаю django веб-сайт электронной торговли. На странице моей корзины отображаются товары, количество, цена и все остальное в заказе. Я создаю мини-корзину, которая отображается на всех страницах, когда пользователь наводит курсор на значок корзины, на котором отображаются все эти данные, и пользователь может щелкнуть по ней, чтобы перейти на страницу корзины go. Это работало на всех других моих страницах (страница продуктов и страница корзины), но я не могу добавить необходимые переменные на мою страницу DetailView для каждого продукта.

С этим связаны следующие модели:

class Product(models.Model):
    name = models.CharField(max_length=200, null=True)
    price = models.FloatField(max_length=200)
    description = models.TextField(max_length=500, default='No description')
    digital = models.BooleanField(default=False, null=True, blank=False)
    image_1 = models.ImageField(null=True, blank=False, default='')
    image_2 = models.ImageField(null=False, blank=True, default='')
    image_3 = models.ImageField(null=False, blank=True, default='')
    images = [image_1,image_2,image_3,]

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('product-detail', kwargs={'pk':self.pk})


class Order(models.Model):
    customer = models.ForeignKey(Customer, on_delete=models.SET_NULL, blank=True, null=True)
    date_ordered = models.DateTimeField(auto_now_add=True)
    complete = models.BooleanField(default=False, null=True, blank=False)
    transaction_id = models.CharField(max_length=200, null=True)

    def __str__(self):
        return str(self.id)

    @property
    def shipping(self):
        shipping = False
        orderitems = self.orderitem_set.all()
        for i in orderitems:
            if i.product.digital == False:
                shipping = True
        return shipping

    @property
    def get_cart_total(self):
        orderitems = self.orderitem_set.all()
        total = sum([item.get_total for item in orderitems])
        return total

    def get_cart_items(self):
        orderitems = self.orderitem_set.all()
        total = sum([item.quantity for item in orderitems])
        return total


class OrderItem(models.Model):
    product = models.ForeignKey(Product, on_delete=models.SET_NULL, blank=True, null=True)
    order = models.ForeignKey(Order, on_delete=models.SET_NULL, blank=True, null=True)
    quantity = models.IntegerField(default=0, null=True, blank=True)
    date_added = models.DateTimeField(auto_now_add=True)

    @property
    def get_total(self):
        total = self.product.price * self.quantity
        return total

И мои представления:

def products(request):

    if request.user.is_authenticated:
        customer = request.user.customer
        order, created = Order.objects.get_or_create(customer=customer, complete=False)
        items = order.orderitem_set.all()
        cartItems = order.get_cart_items
    else:
        items = []
        order = {'get_cart_total':0, 'get_cart_items':0, 'shipping':False}
        cartItems = order['get_cart_items']

    products = Product.objects.all()
    context = {'items':items, 'order':order,'products':products, 'cartItems':cartItems}
    return render(request, 'store/products.html', context)

def cart(request):
    if request.user.is_authenticated:
        customer = request.user.customer
        order, created = Order.objects.get_or_create(customer=customer, complete=False)
        items = order.orderitem_set.all()
        cartItems = order.get_cart_items
    else:
        items = []
        order = {'get_cart_total':0, 'get_cart_items':0, 'shipping':False}
        cartItems = order['get_cart_items']
    context = {'items':items, 'order':order, 'cartItems':cartItems}
    return render(request, 'store/cart.html', context)

class ProductDetailView(DetailView):
    model = Product

Итак, в основном, мне нужно, чтобы мой ProductDetailView получал контекст элементов и порядка, потому что я использую эти переменные для отображения элементов заказа в Моя страница «Подробный просмотр» 'мини-тележка'. Прошу прощения за длинные коды, но я не был уверен, какие из них нужны. Как мне добавить контекст «элементы» и «порядок» в мой DetailView, как я сделал для других моих представлений?

...