staff can only add speakers from the right conference to a talk

This commit is contained in:
Guilhem Saurel 2017-11-28 00:39:25 +01:00
parent 45facae55c
commit ca38b114ec
2 changed files with 7 additions and 15 deletions

View File

@ -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})

View File

@ -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'))