Связи моделей
Если мы хотим связать разные модули (например новости и категории новостей), то нам необходимо сделать следующее:
Создать новый класс (например категорий новостей). Делается это в файле
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',)