Как установить значение по умолчанию для поля multiselect в django

У меня есть модель Account, которая расширяет пользовательскую модель User от django:

class Account(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    joined_groups = models.ManyToManyField(Group, related_name='joined_group', blank=True)
    created_groups = models.ManyToManyField(Group, blank=True)
    EMAIL_PREFERENCES = [
        ('user_emails', 'User Emails'),
        ('group_emails', 'Group Emails'),
        ('leader_emails', 'Leader Emails'),
    ]
    email_preferences = MultiSelectField(
        verbose_name = 'Email Preferences',
        choices=EMAIL_PREFERENCES,
        blank=True,
        max_choices=3,
        max_length=255,
    )

Когда пользователь регистрируется или заходит на сайт, он создает подключенный аккаунт с теми же id и pk, при этом поля joined_groups и created_groups пустые. Однако у них также не выбрано ни одно из полей email_preferences. Вот в чем заключается моя проблема.

Я хочу, чтобы для пользователя, который зарегистрировался, по умолчанию было установлено значение email_preferences true для всех. Затем, если они предпочитают не получать никаких писем, они могут редактировать свои email_preferences на странице своего аккаунта.

Последнее, после выбора email_preferences мне нужно добавить условие в представление, чтобы увидеть, должен ли этот пользователь получать уведомления по электронной почте:

Для случая, когда пользователь создает группу:

class CreateGroup(CreateView):
    model = Group
    form_class = GroupForm
    template_name = 'create_group.html'

    def form_valid(self, form):
        group = form.save()
        group.joined.add(self.request.user)
        account = self.request.user.account
        account.created_chaburahs.add(group)
        account.joined_chaburahs.add(group)
        email = account.user.email

        # celery task to send email
        create_group_notification_task.delay(email)
        return HttpResponseRedirect(reverse('group_detail', args=[str(group.pk)]))

Моя проблема в том, что я не знаю, как получить доступ к нужному условию. Если пользователь разрешает лидеру (главе группы) отправлять электронные письма, то он должен получить письмо с уведомлением о создании группы. Но как мне получить доступ к этому условию?

Похож ли он на массив? Это if email_preferences.leader_emails == True? Или это совсем другой синтаксис?

Как указал @Taras в комментариях, на этот вопрос уже был дан ответ. Добавление значения по умолчанию или списка значений по умолчанию - это то же самое, что и любое другое поле, как кажется:

email_preferences = MultiSelectField(
        verbose_name = 'Email Preferences',
        choices=EMAIL_PREFERENCES,
        blank=True,
        max_choices=3,
        max_length=255,
        default=['user_emails', 'group_emails', 'leader_emails']
)

сработало для меня. Однако я все еще не уверен, как получить доступ к этим вариантам выбора через условие в моем представлении.

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