Как дать пользователю возможность выбрать произвольное количество "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)