Связи моделей
Если мы хотим связать разные модули (например новости и категории новостей), то нам необходимо сделать следующее:
Создать новый класс (например категорий новостей). Делается это в файле
models.py
модуля новостей:class Category(models.Model): title = models.CharField(max_length=150, db_index=True, verbose_name='Наименование категории') def __str__(self): # Добавляем строковое представление объекта return self.title class Meta: verbose_name = 'Категория' # наименование модели в единственном числе verbose_name_plural = 'Категории' # наименование модели во множественном числе ordering = ['title']
Параметр Описание db_index=True
Делаем поле индексируемым, тем самым ускоряем поиск по нему - Далее в классе новостей добавляем новое поле
ForeignKey
:category = models.ForeignKey('Category', on_delete=models.PROTECT, null=True, verbose_name='Наименование категории')
Параметр Описание on_delete=models.PROTECT
Защита от удаления связанных данных null=True
Данное поле необходимо при предотвращении конфликтов возникающих при добавлении новой обязательной колонки. Все уже добавленные новости будут иметь данное поле со значением null. Выполняем подготовку миграции и выполняем миграцию
- Для отображения категорий в админке нужно в файле
admin.py
:
- Импортировать модуль:
from .models import Category
- Зарегистрировать модуль
admin.site.register(Category, CategoryAdmin)
- Настроить отображения в админке
class CategoryAdmin(admin.ModelAdmin): list_display = ('id', 'title') list_display_links = ('id', 'title') search_fields = ('title',)