diff --git a/cfp/forms.py b/cfp/forms.py index 0778295..291e095 100644 --- a/cfp/forms.py +++ b/cfp/forms.py @@ -364,16 +364,8 @@ class VolunteerForm(forms.ModelForm): fields = ['name', 'email', 'phone_number', 'sms_prefered', 'notes'] -class ParticipantWidget(ModelSelect2MultipleWidget): - model = Participant - search_fields = [ '%s__icontains' % field for field in ['name', 'email', 'twitter', 'linkedin', 'github', - 'website', 'facebook', 'mastodon', 'phone_number' ]] - - -class TalkSpeakerForm(forms.ModelForm): - class Meta: - model = Talk - fields = ['speakers'] - widgets = { - 'speakers': ParticipantWidget(), - } +def get_talk_speaker_form_class(site): + fields = ['name', 'email', 'twitter', 'linkedin', 'github', 'website', 'facebook', 'mastodon', 'phone_number'] + widget = ModelSelect2MultipleWidget(model=Participant, queryset=Participant.objects.filter(site=site), + search_fields=['%s__icontains' % field for field in fields]) + return modelform_factory(Talk, fields=['speakers'], widgets={'speakers': widget}) diff --git a/cfp/views.py b/cfp/views.py index 0334429..7be8dcd 100644 --- a/cfp/views.py +++ b/cfp/views.py @@ -26,7 +26,7 @@ from .decorators import speaker_required, volunteer_required, staff_required from .mixins import StaffRequiredMixin, OnSiteMixin, OnSiteFormMixin from .utils import is_staff from .models import Participant, Talk, TalkCategory, Vote, Track, Tag, Room, Volunteer, Activity -from .forms import TalkForm, TalkStaffForm, TalkFilterForm, TalkActionForm, TalkSpeakerForm, \ +from .forms import TalkForm, TalkStaffForm, TalkFilterForm, TalkActionForm, get_talk_speaker_form_class, \ ParticipantForm, ParticipantFilterForm, NotifyForm, \ ConferenceForm, HomepageForm, CreateUserForm, TrackForm, RoomForm, \ VolunteerForm, VolunteerFilterForm, MailForm, \ @@ -708,7 +708,7 @@ def talk_decide(request, talk_id, accept): @staff_required def talk_speaker_add(request, talk_id): talk = get_object_or_404(Talk, pk=talk_id, site=request.conference.site) - form = TalkSpeakerForm(request.POST or None, instance=talk) + form = get_talk_speaker_form_class(site=talk.site)(request.POST or None, instance=talk) if request.method == 'POST' and form.is_valid(): form.save() messages.success(request, _('Decision taken in account'))