Django простая модель. Команда для загрузки данных.

Basics of Python and Django. -> Django простая модель. Команда для загрузки данных.

Django простая модель. Команда для загрузки данных.

Установка

pip install Django

Создание проекта

django-admin startproject myprj

cd myprj

Создаем базу данных

./manage.py migrate

Запускаем сервер

./manage.py runserver

Создаем приложение

./manage.py startapp main

main - название приложения

Включить приложение в settings.py

INSTALLED_APPS = [
    ...
    'main'
]

Добавляем новый урл в urls.py

urlpatterns = [
    path('', index),
    path('admin/', admin.site.urls),
]

Создаем новую функцию в main/views.py

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

В settings.py определяем путь к шаблонам.

TEMPLATES = [
    {
    ....
    'DIRS': [BASE_DIR / 'templates'],

Создаем templates в папке проекта и ложим index.html

<!DOCTYPE html>
<html lang="en">


<head>
    <meta charset="utf-8">
    <title>
        Title
    </title>
</head>

<body >

   <h1> Hello </h1>

</body>

</html>

Создаем класс модели в файле models.py

from django.db import models

class Page(models.Model):
    title = models.CharField(max_length=250)
    content = models.TextField()

ссылка на все типы полей

Создаем файл миграции коммандой

./manage.py makemigrations

Применяем

./manage.py migrate

Создаем команду загрузки данных

в новом каталоге main/management/commands/hello.py

from django.core.management.base import BaseCommand, CommandError

class Command(BaseCommand):

    def handle(self, *args, **options):
       print('Hello command!!!')

Запускаем команду

./manage.py hello

Добавляем данные в таблицу

from page.models import Page


class Command(BaseCommand):

    def handle(self, *args, **options):
       print('Hello command!!!')
       Page.objects.all().delete()
       page1 = Page()
       page1.title = 'Index page'
       page1.content = 'content content'
       page1.save()

Выбираем страницу из функци во view

from page.models import Page

def index(request):
    page = Page.objects.get(id=7)
    return render(request,'index.html',{"page": page})

Выводим в шаблоне

<h1> {{ page.title }} </h1>
Basics of Python and Django. -> Django. Категории, товары. Связи таблиц.

Django. Выбор многих записей. Категории. Товары. Админка.

Создание админки под модель app/admin.py.

from django.contrib import admin

from page.models import Page

class PageAdmin(admin.ModelAdmin):
    pass
admin.site.register(Page, PageAdmin)

Как выбрать все записи из вьюшки.

pages = Page.objects.all()
return render(request,'index.html',{"pages": pages})

Как пройти по списку в шаблоне.

{% for i in pages %}

{{ i.title }}

Создание модели каталога.

class Catalog(models.Model):
    name = models.CharField(max_length=250)

Админка.

class CatalogAdmin(admin.ModelAdmin):
    pass
admin.site.register(Catalog, CatalogAdmin)

Создание комманды загрузки тестовых данных load_data.py.

from django.core.management.base import BaseCommand, CommandError

from page.models import Catalog

lst = ['Car', 'Funiture', 'Food', 'Clothes']


class Command(BaseCommand):

    def handle(self, *args, **options):
       print('Loading catalog!!')
       for i in lst:
           c = Catalog()
           c.name = i
           c.save()

Переопределим метод str

class Catalog(models.Model):
    name = models.CharField(max_length=250)

    def __str__(self):
        return self.name

Связка один-ко-многим.

class Catalog(models.Model):
    name = models.CharField(max_length=250)

    def __str__(self):
        return self.name


class Product(models.Model):
    name = models.CharField(max_length=250)
    content = models.TextField()
    catalog = models.ForeignKey(Catalog,on_delete=models.CASCADE, default='', blank=True, null=True)

    def __str__(self):
        return self.name

Кастомизация админки.

class ProductAdmin(admin.ModelAdmin):
    list_display = ['name', 'catalog']
    list_filter = ['catalog']
admin.site.register(Product, ProductAdmin)