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)