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)