Django Class Based Views - 3

Model:

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=255)
    price = models.FloatField()
    stock = models.IntegerField()
    image_url = models.CharField(max_length=2083)
    discount_price = models.FloatField()
    description = models.CharField(max_length=255)

    def __str__(self):
        return self.name

 Urls:

from django.contrib import admin
from django.urls import path

from product.views import ProductDetailView

urlpatterns = [
    path('admin/', admin.site.urls),
    path("product/<int:id>/", ProductDetailView.as_view(), name="product-detail")
]

View:

from django.db.models import F
from django.shortcuts import render
from django.views.generic import DetailView

from product.models import Product


class ProductDetailView(DetailView):
    model = Product
    template_name = "product_detail.html"
    pk_url_kwarg = "id"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        return context
    
    def get_queryset(self):
        return super().get_queryset().annotate(
            total_price=F("price") - F("discount_price"),
        )
        

 

Html:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
price : {{ product.price }} <br>
discount price : {{ product.discount_price }} <br>
total price : {{ product.total_price }} <br>


</body>
</html>

Comments

    There are no comments yet.

Comment