Django Модель. Команди. Адмінка.
Основи Python и Django. -> Django модель.
Django Модель.
Модель є набол Python класів, успадкованих від базового класу Django, та описують структуру майбутніх таблиць та їх зв’язків.
Модель описується у файлах models.py вашої програми.
Створимо три класи таблиць із категоріями новинами та коментарями у фалі main/models.py.
from django.db import models
# Create your models here.
class Category(models.Model):
name = models.CharField(max_length=250)
class News(models.Model):
title = models.CharField(max_length=250)
text = models.TextField()
category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)
image = models.ImageField(null=True, blank=True)
class Comment(models.Model):
text = models.TextField()
author = models.CharField(max_length=250)
news = models.ForeignKey(News, on_delete=models.CASCADE)
У цих класах кожна змінна є полем таблиці з його налаштуваннями (типом, значенням за умовчанням і т.д.)
Після створення цих класів потрібно створити міграцію.
Міграція – це спеціальний скрипт, який змінює базу даних.
Створення міграції.
./manage.py makemigrations
Застосування міграції.
./manage.py migrate
У результаті маємо створитися 3 таблиці.
main_category
main_news
main_comment
Основи Python и Django. -> Django.Команди.
slug: py-tmux name: . meta_title: Робота з MySQL meta_keywords: Робота з MySQL meta_description: Робота с MySQL is_active: true desc: |
files:
-
file: 'django-model.md'
title: 'Django модель.'
meta_title: 'Django модель.'
meta_description: 'Django модель.'
meta_keywords: 'django model'
desc:
-
file: 'django-command.md'
title: 'Django. Команды.'
meta_title: 'Django. Команды.'
meta_description: 'Django. Команды.'
meta_keywords: 'django command'
desc:
-
file: 'django-admin.md'
title: 'Django. Адмін інтерфейс.
meta_title: 'Django. Адмін інтерфейс.
meta_description: 'Django. Адмін інтерфейс.
meta_keywords: 'django admin'
desc:
Основи Python и Django. -> Домашнее задание.
Адмін інтерфейс. Домашнє завдання.
Створити модель та адмін-інтервейс наступних 3-х таблиць.
Категорії. Книги Автори.
Кожна книга має свою категорію та автора.
Поля для книги.
-
назва
-
короткий опис
-
рік випуску
-
зображення обкладинки
-
Логічний ознака опублікованості.
-
категорія
-
Автор.
Основи Python и Django. -> Django.Адмін інтерфейс.
ААдмін інтерфейс.
Додамо класи адмінки до main/admin.py
from django.contrib import admin
from .models import Category, News, Comment
# Register your models here.
class CategoryAdmin(admin.ModelAdmin):
pass
admin.site.register(Category,CategoryAdmin)
class NewsAdmin(admin.ModelAdmin):
pass
admin.site.register(News,NewsAdmin)
class CommentAdmin(admin.ModelAdmin):
pass
admin.site.register(Comment,CommentAdmin)
Для того, щоб змінити заголовки посилань у списках, необхідно додати та описати метод str у класі моделі.
class Category(models.Model):
name = models.CharField(max_length=250)
def __str__(self):
return self.name
Доступ до медіа-контенту.
Для того, щоб визначити каталог для зберігання зображень, що завантажуються, потрібно додати 2 змінні у налаштування settings.py.
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
MEDIA_URL = '/media/'
Також необхідно додати роутинг для медіа-вмісту для DEBUG режиму у файлі urls.py.
from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Далі, щоб визначити папку, для зберігання зображень, доповнимо поле image змінної upload_to.
class News(models.Model):
...
image = models.ImageField(upload_to='news',null=True, blank=True)
Після цього зображення повинні завантажуватися в media/news і бути доступними для перегляду в браузері.
Приклад конфігурування адмін інтерфейсу з прикладу класу NewsAdmin.
class NewsAdmin(admin.ModelAdmin):
list_display = ['title', 'text', 'category']
list_filter = ['category']
search_fields = ['title']
list_editable = ['category']
raw_id_fields = ['category']