Поля модели 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 обрабатывает это.

Вернуться на верх