Django проста модель. Команда для завантаження даних.

Основи Python и 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>
Основи Python и 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)