from django import forms from django.core.exceptions import ValidationError from django.utils.safestring import mark_safe from pagedown.widgets import PagedownWidget from .models import Activity, VISIBILILTY_HELP_TEXT, VISIBILITY class CommentForm(forms.ModelForm): class Meta: model = Activity fields = ('message', 'visibility') labels = { 'visibility': 'Visible to', 'message': '', } widgets = { 'visibility': forms.RadioSelect(), 'message': PagedownWidget(), } def __init__(self, *args, user=None, **kwargs): super().__init__(*args, **kwargs) self.allowed_visibility = self._meta.model.visibility_for(user) self.visibility_choices = self._meta.model.visibility_choices_for(user) visibility = self.fields['visibility'] visibility.initial = self.visibility_choices[0] if len(self.visibility_choices) > 1: visibility.choices = self.visibility_choices visibility.help_text = mark_safe('<br>'.join( [VISIBILITY[choice] + ': ' + VISIBILILTY_HELP_TEXT[choice] for choice in self.allowed_visibility] )) else: visibility.widget = forms.HiddenInput() def clean_visibility(self): choice = self.cleaned_data['visibility'] if choice not in self.allowed_visibility: raise ValidationError('You do not have permission for that visibility.') return choice