Должен ли я создавать модель для содержания экземпляров другой модели? (Django)
Я новичок в django, поэтому я не уверен в правильном способе делать вещи (или конвенции).
Допустим, я хочу сделать проект, содержащий мои ежедневные заметки.
Я собираюсь создавать множество заметок каждый день (где каждая заметка будет экземпляром модели "Note") .
Я хочу, чтобы в моем проекте-фронтенде были контейнеры, где я начинаю с контейнеров, каждый из которых относится к определенному году (скажем, 2020, 2021, ...) и каждый из этих контейнеров содержит контейнеры месяцев (Jan, Feb, ...) и каждый из них содержит контейнеры дней (1, 2, ...) и каждый из них содержит заметки этого конкретного дня.
Теперь мой вопрос: должен ли я в своем бэкенде сделать модель NoteYear, которая имеет экземпляры модели NoteMonth, которая имеет экземпляры модели NoteDay, которая имеет экземпляры модели Note?
Причина, по которой я подумал об этом, заключается в том, что нужно быстрее фильтровать, чтобы добраться до определенного дня.
Хотелось бы услышать ваше мнение!
Вы можете использовать модели как объекты хранения, что означает, что вам не нужно определять свои модели на основе каждого контейнера.
Соответственно, вы можете определить 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