Как установить значение по умолчанию для поля 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']
)
сработало для меня. Однако я все еще не уверен, как получить доступ к этим вариантам выбора через условие в моем представлении.