Как дать пользователю возможность выбрать произвольное количество "n" языков при регистрации аккаунта?

Предположим, я создаю следующее приложение для изучения языков, подобное Duolingo. Первоначально в процессе регистрации аккаунта пользователь может выбрать до 5 изучаемых языков. Позже пользователь может подписаться на премиум-подписку и выбрать до N языков на другой странице, например, в настройках аккаунта. Эти выбранные языки будут в конечном итоге фильтровать ленту пользователя.

Как мне правильно поступить? Как будет называться нечто подобное, чтобы я мог прочитать больше об этом в документации. Спасибо.

Было бы неплохо, если бы я мог определить допустимое число непосредственно в файле настроек:

STANDARD_USER_LANGUAGE_ALLOWANCE = 3
SUBSCRIBED_USER_LANGUAGE_ALLOWANCE = 5

Метод 1 (скорее всего, ужасный и не DRY):

class User(AbstractUser):
    // Manually list all of them here and keep adding in the future
    language1 = ...
    language2 = ... 
    language3 = ...

class Language(models.Model):
    name = models.CharField(
        max_length=20,
    )

    short_name = models.CharField(
        max_length=20,
    )

    def __str__(self):
        return self.name

    class Meta:
        ordering = ['name']

Метод 2 (Возможно, использовать отношение ManyToMany с несколькими флажками в качестве виджета)? Будет ли это вообще хорошим применением ManyToMany?

class User(AbstractUser):
  languages = models.ManyToManyField(Language)
Вернуться на верх