pulseapi/entries/forms.py (36 lines of code) (raw):

from django import forms from ajax_select.fields import AutoCompleteSelectMultipleField from pulseapi.creators.models import EntryCreator from pulseapi.utility.image_validation import enforce_image_size_limit class EntryAdminForm(forms.ModelForm): creators = AutoCompleteSelectMultipleField( 'profiles', plugin_options={ 'minLength': 3, }, widget_options={ 'attrs': { 'placeholder': 'Enter a creator\'s name to add to the list' } }, help_text='', # We do this since the default django help text isn't positioned correctly with our custom CSS ) bookmark_count = forms.IntegerField(disabled=True, required=False) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if self.instance.pk: self.initial['creators'] = self.instance.related_entry_creators.values_list('profile__pk', flat=True) self.initial['bookmark_count'] = self.instance.bookmarked_by.count() if not self.current_user.has_perm('entries.change_creators'): self.fields['creators'].disabled = True def _save_m2m(self): super()._save_m2m() entry = self.instance creator_profile_id_list = self.cleaned_data['creators'] entry.related_entry_creators.all().delete() for creator_profile_id in creator_profile_id_list: profile_id = int(creator_profile_id) EntryCreator.objects.create(entry=entry, profile_id=profile_id) def clean_thumbnail(self): data = self.cleaned_data["thumbnail"] return enforce_image_size_limit(data)