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']