from django.db import transaction from django.shortcuts import render, redirect from boards.views.base import BaseBoardView, PARAMETER_FORM from boards.forms import SettingsForm, ModeratorSettingsForm, PlainErrorList from boards.models.post import SETTING_MODERATE class SettingsView(BaseBoardView): def get(self, request): context = self.get_context_data(request=request) user = context['user'] is_moderator = user.is_moderator() selected_theme = context['theme'] if is_moderator: form = ModeratorSettingsForm(initial={ 'theme': selected_theme, 'moderate': context['moderator'] }, error_class=PlainErrorList) else: form = SettingsForm(initial={'theme': selected_theme}, error_class=PlainErrorList) context[PARAMETER_FORM] = form return render(request, 'boards/settings.html', context) def post(self, request): context = self.get_context_data(request=request) user = context['user'] is_moderator = user.is_moderator() with transaction.atomic(): if is_moderator: form = ModeratorSettingsForm(request.POST, error_class=PlainErrorList) else: form = SettingsForm(request.POST, error_class=PlainErrorList) if form.is_valid(): selected_theme = form.cleaned_data['theme'] user.save_setting('theme', selected_theme) if is_moderator: moderate = form.cleaned_data['moderate'] user.save_setting(SETTING_MODERATE, moderate) return redirect('settings')