Должен ли я создавать модель для содержания экземпляров другой модели? (Django)

Я новичок в django, поэтому я не уверен в правильном способе делать вещи (или конвенции).

Допустим, я хочу сделать проект, содержащий мои ежедневные заметки.

Я собираюсь создавать множество заметок каждый день (где каждая заметка будет экземпляром модели "Note") .

Я хочу, чтобы в моем проекте-фронтенде были контейнеры, где я начинаю с контейнеров, каждый из которых относится к определенному году (скажем, 2020, 2021, ...) и каждый из этих контейнеров содержит контейнеры месяцев (Jan, Feb, ...) и каждый из них содержит контейнеры дней (1, 2, ...) и каждый из них содержит заметки этого конкретного дня. enter image description here

Теперь мой вопрос: должен ли я в своем бэкенде сделать модель NoteYear, которая имеет экземпляры модели NoteMonth, которая имеет экземпляры модели NoteDay, которая имеет экземпляры модели Note? enter image description here

<

Причина, по которой я подумал об этом, заключается в том, что нужно быстрее фильтровать, чтобы добраться до определенного дня.

Хотелось бы услышать ваше мнение!

Вы можете использовать модели как объекты хранения, что означает, что вам не нужно определять свои модели на основе каждого контейнера.

Соответственно, вы можете определить models следующим образом и использовать django-template для итерации и фильтрации по датам в годах/месяцах/днях.

class Notes(models.Model):
    title = models.CharField(max_length=200)
    created = models.DateTimeField(default=timezone.now)
    updated = models.DateTimeField(default=timezone.now, blank=True)

Модели должны не писаться на основе того, как представить данные на внешнем интерфейсе. Модели должны пытаться представлять и хранить данные эффективным образом.

Здесь было бы чистым измышлением создавать модели для элементов года, месяца и дня. Простой модели Note с DateTimeField должно быть достаточно, особенно если вы добавите индекс базы данных к этому полю, чтобы его можно было легко фильтровать.

Такая модель, таким образом, выглядит следующим образом:

from django.db import models

class Note(models.Model):
    note = models.TextField()
    created = models.DateTimeField(auto_now_add=True, db_index=True)

Затем вы можете эффективно получить элементы для заданного года, месяца и дня с помощью:

Note.objects.filter(created__year=2021)  # year
Note.objects.filter(created__year=2021, created__month=9)  # month
Note.objects.filter(created__year=2021, created__month=9, day=25)  # day
Вернуться на верх