Meys313
@Meys313

Как правильно сформировать модель для статьи ( поста )?

У нас есть статья про программирование, у статьи есть заголовок ( то есть её главная тема ), раздел, к которому эта самая статья принадлежит ( категория ), внутри статьи текст ( разделы ) с примерами в виде изображений и кода. Вопрос: Как грамотно сформировать модели для такой статьи, чтобы помимо всего прочего с информацией потом ещё можно было работать в шаблоне

Я накидал примерно такую логику ( прошу заметить, что это набросок кода ), но в силу малого опыта не уверен, что такой подход разумен.
from django.db import models


class Category(models.Model):
    name = models.CharField(max_length=400, verbose_name='Раздел')

class Article(models.Model):
    title = models.CharField(max_length=400, verbose_name='Тема статьи')
    category = models.ForeignKey(Category, on_delete=models.PROTECT)

class Section(models.Model):
    title = models.CharField(max_length=255, verbose_name='Заголовок раздела')
    text = models.TextField(blank=True, verbose_name='Текст раздела')
    article = models.ForeignKey(Article, on_delete=models.CASCADE)

class Photo(models.Model):
    article = models.ForeignKey(Article, on_delete=models.CASCADE)
    section = models.ForeignKey(Section, on_delete=models.CASCADE)
    photo = models.ImageField(upload_to=f"photos/{article.name}", verbose_name='Фотография')

class Code(models.Model):
    article = models.ForeignKey(Article, on_delete=models.CASCADE)
    section = models.ForeignKey(Section, on_delete=models.CASCADE)
    code = models.TextField(blank=True, verbose_name='Код')


Как и писал выше, в статье будет содержаться множество примеров кода и изображений, которые нужно не только вывести в нужном месте, но и стилистически оформить, Основное содержание статьи хоть и представляет из себя сплошной текст, все равно разбито на разделы

Получается что:
  • Есть модель Category - тема к которой принадлежит статья
  • общая модель поста, содержащая только его название. Связана по ключу с Category
  • Section, соответственно, будет содержать заголовок и текст раздела
  • Ниже идёт модель для фотографии и кода, они связаны с определенным разделом по ключам и при отображении шаблона можно будет ставить проверку, что если на id раздела ссылается фотография и код, то их необходимо отобразить


Насколько вообще правильным является такое решение ?
  • Вопрос задан
  • 53 просмотра
Пригласить эксперта
Ответы на вопрос 1
AlexNest
@AlexNest Куратор тега Python
Работаю с Python/Django
Ну, как минимум FK к article у кода и фотографий - лишний.
P.S. При загрузке файлов лучше генерить им рандомные имена
import uuid
import os

def get_file_path(instance, filename):
    ext = filename.split('.')[-1]
    filename = f'{uuid.uuid4()}.{ext}'
    return os.path.join('folder_path', filename) # folder_path - нужная папка (article, по идее можно вытянуть из instance)
...
...upload_to=get_file_path
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы