2. Asosiy va do'kon sahifasi

2. Asosiy va do'kon sahifasi

December 03, 2021


Reja:

  1. Slug hususiyati
  2. Mahsulotlar modeli
  3. Mahsulotlarni qo'shish
  4. Asosiy sahifada mahsulotlarni ko'rsatish
  5. Do'kon sahifasi
  6. Do'kon sahifasida mahsulotlarni ko'rsatish
  7. Mahsulotlarni kategoriya bo'yicha ko'rsatish


1. Slug hususiyati

1. category jadvalini o'chiramiz

2. category > models.py

class Category(models.Model):
    ...
    slug = models.SlugField(max_length=50, unique=True)
    ...

3. category > admin.py

from django.contrib import admin
from .models import Category

class CategoryAdmin(admin.ModelAdmin):
    list_display= ('name', 'slug')
    prepopulated_fields = {'slug': ('name',)}

admin.site.register(Category, CategoryAdmin)


2. Mahsulotlar modeli

1. python .\manage.py startapp store

2. settings.py


INSTALLED_APPS = [
    ...
    'store'
]

3. store > models.py

from django.db import models
from category.models import Category

# Create your models here.
class Product(models.Model):
    name = models.CharField(max_length=100, unique=True)
    slug = models.SlugField(max_length=100, unique=True)
    description = models.TextField(max_length=500, blank=True)
    price = models.IntegerField()
    image = models.ImageField(upload_to = 'photoes/products')
    stock = models.IntegerField()
    is_available = models.BooleanField(default=True)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    created_date = models.DateTimeField(auto_now_add=True)
    modified_date = models.DateTimeField(auto_now=True)

    def __str__(self) -> str:
        return self.name

4. store > admin.py

from django.contrib import admin

from .models import Product

class ProductAdmin(admin.ModelAdmin):
    list_display= ('name', 'price', 'stock', 'category', 'modified_date', 'is_available')
    prepopulated_fields = {'slug': ('name',)}
# Register your models here.
admin.site.register(Product, ProductAdmin)

5 python manage.py makemigrations

6 python manage.py migrate

7 python manage.py runserver


3. Mahsulotlarni qo'shish

4. Asosiy sahifada mahsulotlarni ko'rsatish

1. adana > views.py

from django.http import request
from django.shortcuts import render
from store.models import Product

def home(request):
    products = Product.objects.filter(is_available=True)
    context = {
        'products': products
    }
    return render(request, 'home.html', context)

2. templates > home.html

...
        <div class="row">
            {% for product in products %}
            <div class="col-md-3">
                <div class="card card-product-grid">
                    <a href="{% static './product-detail.html' %}" class="img-wrap"> <img src="{{product.image.url}}">
                    </a>
                    <figcaption class="info-wrap">
                        <a href="{% static './product-detail.html' %}" class="title">{{product.name}}</a>
                        <div class="price mt-1">$ {{product.price}}</div> <!-- price-wrap.// -->
                    </figcaption>
                </div>
            </div> <!-- col.// -->
            {% endfor %}
        </div> 
...

3. python manage.py runserver

5. Do'kon sahifasi

1. store > views.py

from django.shortcuts import render
from .models import Product

def store(request):    
    return render(request, 'store.html')

2. adana > urls.py

...
urlpatterns = [
    ...
    path('store/', include("store.urls"))
] + static(MEDIA_URL, document_root=MEDIA_ROOT)


3. store > urls.py

from django.urls import path
from .views import store

urlpatterns = [
    path('', store, name="store")
] 

4. templates > store.html

4.1 shablonni yasaymiz

4.2 berilgan store.htmldan kerakli qismini ko'chirib olamiz


6. Do'kon sahifasida mahsulotlarni ko'rsatish

1. store > views.py

def store(request):    
    products = Product.objects.filter(is_available=True)
    context = {
        'products': products,
        'product_count': products.count()
    }
    return render(request, 'store.html', context)

2. templates > store.html

<div class="row">
    {% for product in products %}
    <div class="col-md-4">
        <figure class="card card-product-grid">
            <div class="img-wrap">

                <img src="{{product.image.url}}">

            </div> <!-- img-wrap.// -->
            <figcaption class="info-wrap">
                <div class="fix-height">
                    <a href="./product-detail.html" class="title">{{product.name}}</a>
                    <div class="price-wrap mt-2">
                        <span class="price">{{product.price}}</span>

                    </div> <!-- price-wrap.// -->
                </div>
                <a href="#" class="btn btn-block btn-success">Added to cart </a>
            </figcaption>
        </figure>
    </div> <!-- col.// -->
    {% endfor %}
</div> <!-- row end.// -->

7. Mahsulotlarni kategoriya bo'yicha ko'rsatish

1. store > urls.py

urlpatterns = [
    ...
    path('<slug:category_slug>/', store, name="products_by_category"), 
] 

2. store > views.py

from django.shortcuts import get_object_or_404, render
from category.models import Category
from .models import Product

def store(request, category_slug=None):
    if category_slug == None:
        products = Product.objects.filter(is_available=True)
    else:
        categories = get_object_or_404(Category, slug=category_slug)
        products = Product.objects.filter(is_available=True, category=categories)

    context = {
        'products': products,
        'product_count': products.count()
    }
    return render(request, 'store.html', context)


Report Page