Создание моделей в Django для онлайн-магазина

Навигация по проекту
  1. Создание проекта в Django

  2. Создание моделей в Django для онлайн-магазина

  3. Административный сайт Django

  4. Создание представлений (views) в Django

 

Справочник моделей Django 

Проект Django представляет собой группу отдельных приложений, совместная работа которых обеспечивает работу проекта в целом. В первом разделе мы создали проект и базу данных. Теперь пришло время создать приложения. Создадим модели для каталогов товара и модель описания продукта с фотографией.

Содержание страницы:

1. Создания приложения shop

2. Определение моделей каталога товаров

1. Создания приложения shop

Создадим приложение shop, в котором разместим модели категории товаров и описание продукта. В начале откройте консоль и активируйте виртуальное окружение, которое создали в предыдущем разделе с проектом Django. Новое приложение в проекте my_site создается с помощью команды django-admin startapp:

(ms_env) my_site\my_site>django-admin startapp shop

Shop - это название нашего приложения. Теперь чтобы Django отслеживал наше приложение, его нужно активировать. Перейдите в файл settins.py проекта и добавьте новое приложение в список INSTALLED_APPS:

INSTALLED_APPS = [
    'shop.apps.ShopConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

Ваше приложение создано и подключено к проекту. 

 

 

2. Определение моделей каталога товаров

В магазине в основном все товары разделены по категориям, например, одежда, обувь и т.д. Создадим модель Category и добавим ее в файл models.py нашего приложения shop.

from django.db import models
from django.urls import reverse

class Category(models.Model):
    """Категории, к которым относятся товары"""
    name = models.CharField(max_length=150, db_index=True, verbose_name='Название категории')
    slug = models.SlugField(max_length=150, unique=True)

    class Meta:
        ordering = ('name',)
        verbose_name = 'Категория'
        verbose_name_plural = 'Категории'

    def __str__(self):
        return self.name

    def get_absolute_url(self):
            return reverse('shop:product_list_by_category', args=[self.slug])

Мы создали класс с именем Category, который наследуется от базового класса Model, включенного в Django и определяющего базовую функциональность модели. Класс Category состоит из:

 

 

Теперь создадим модель Product, которая будет описывать какой-либо товар, относящийся к созданной категории (Category). Добавим ее тоже в файл models.py нашего приложения shop.   

class Product(models.Model):
    """Модель описания продукта"""
    category = models.ForeignKey(Category, related_name='products', on_delete=models.CASCADE,
                                 verbose_name='Выберите категорию'
                                 )
    name = models.CharField(max_length=200, db_index=True, verbose_name='Наменование')
    slug = models.SlugField(max_length=200, db_index=True)
    image = models.ImageField(upload_to='products/%Y/%m/%d', blank=True, verbose_name='Фото')
    description = models.TextField(blank=True, verbose_name='Описание')
    price = models.DecimalField(max_digits=15, decimal_places=2, verbose_name='Цена')
    available = models.BooleanField(default=True, verbose_name='Наличие')
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ('name',)
        index_together = (('id', 'slug'),)
        verbose_name = 'Продукт'
        verbose_name_plural = 'Продукты'

    def __str__(self):
        return self.name

    def get_absolute_url(self):
            return reverse('shop:product_detail', args=[self.id, self.slug])

Класс Meta, метод __str__ и get_absolute_url несут такой же функционал, как и в модели Category.                

Так как наша модель Product содержит поле для изображения, необходимо установить пакет Pillow. Сделать это можно с помощью команды:

pip install pillow          

 

 

Так как мы добавили новые модели, необходимо снова провести миграцию базы данных. При изменении файла models.py, вы выполняете команду python manage.py makemigrations, а затем команду python manage.py migrate.

(ms_env) my_site\my_site>python manage.py makemigrations
Migrations for 'shop':
  shop\migrations\0001_initial.py
    - Create model Category
    - Create model Product

(ms_env) my_site\my_site>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, shop
Running migrations:
  Applying shop.0001_initial... OK

Первой командой генерируется новая миграция 0001_initial.py, которая сообщает Django как изменить базу данных. Второй командой Django подтверждает, что миграция прошла успешно.        

 

Далее: Административный сайт Django

Назад: Создание проекта в Django