Поля модели Django: Отслеживание списка возможных элементов
Я создаю модель Django, в которой (в качестве упрощенного примера) группа пользователей (Пользователи все назначаются группе) будет иметь доступ к файлам определенного типа, и то, к каким типам группа может получить доступ, будет меняться в зависимости от группы. Список файлов может быть любым из ~10 распространенных типов файлов. Этот список может меняться, но это, вероятно, не является общим.
Грубо говоря, я вижу два способа сделать это. Представление типов файлов в виде списка строк для каждого пользователя [".jpg", ".txt", ".zip"]
или в виде отношения 1:M с каким-то объектом "FileExtension"
В этих случаях, как я понимаю, путь ORM будет гораздо предпочтительнее (например, если важно отслеживать использование каждого расширения файла как "изображение", "текст", "аудио" и т.д.) Но что, если нет никакой другой информации, которую нам действительно нужно учитывать, кроме самого расширения файла? Есть ли смысл создавать целую модель для нескольких строк? В моем реальном проекте я хочу избежать сложностей, связанных с созданием и поддержкой нескольких моделей и хранением их в БД, если это возможно.
Грубые возможные примеры кода каждого:
Подход к строкам/спискам:
class UserGroup(models.Model):
group_name = models.CharField(max_length=128)
file_access = models.TextField(null=True) #Text field contains JSON-serialized list of strings
Модельный подход:
class UserGroup(models.Model):
group_name = models.CharField(max_length=128)
file_access = models.OneToOneField(FileExtension, on_delete=models.CASCADE, primary_key=True)
class FileExtension(models.Model):
extension = models.CharField(max_length=8, null=True)
Quick Note: Я уже изучил этот ответ, который был полезен тем, что показал мне способы, которыми я могу это сделать, но не оставил меня убежденным в том, что лучший способ для меня здесь. Кроме того, вопрос десятилетней давности, так что, возможно, кое-что изменилось в том, как Django обрабатывает это.