manager: remove hidden fields from Forms (#47091)

This commit is contained in:
Lauréline Guérin 2020-10-02 14:40:08 +02:00 committed by Frédéric Péters
parent 48c786e80e
commit e934c54109
2 changed files with 46 additions and 71 deletions

View File

@ -117,11 +117,9 @@ class NewEventForm(forms.ModelForm):
class Meta:
model = Event
widgets = {
'agenda': forms.HiddenInput(),
'publication_date': forms.DateInput(attrs={'type': 'date'}, format='%Y-%m-%d'),
}
fields = [
'agenda',
'start_datetime',
'duration',
'publication_date',
@ -141,11 +139,9 @@ class EventForm(forms.ModelForm):
class Meta:
model = Event
widgets = {
'agenda': forms.HiddenInput(),
'publication_date': forms.DateInput(attrs={'type': 'date'}, format='%Y-%m-%d'),
}
fields = [
'agenda',
'start_datetime',
'duration',
'publication_date',
@ -166,21 +162,19 @@ class AgendaResourceForm(forms.Form):
resource = forms.ModelChoiceField(label=_('Resource'), queryset=Resource.objects.none())
def __init__(self, *args, **kwargs):
agenda = kwargs.pop('agenda')
super().__init__(*args, **kwargs)
self.fields['resource'].queryset = Resource.objects.exclude(agenda=self.initial['agenda'])
self.fields['resource'].queryset = Resource.objects.exclude(agenda=agenda)
class NewMeetingTypeForm(forms.ModelForm):
class Meta:
model = MeetingType
widgets = {
'agenda': forms.HiddenInput(),
}
exclude = ['slug', 'deleted']
exclude = ['agenda', 'slug', 'deleted']
def clean(self):
super().clean()
agenda = self.cleaned_data['agenda']
agenda = self.instance.agenda
for virtual_agenda in agenda.virtual_agendas.all():
for real_agenda in virtual_agenda.real_agendas.all():
if real_agenda != agenda:
@ -192,10 +186,7 @@ class NewMeetingTypeForm(forms.ModelForm):
class MeetingTypeForm(forms.ModelForm):
class Meta:
model = MeetingType
widgets = {
'agenda': forms.HiddenInput(),
}
exclude = ['deleted']
exclude = ['agenda', 'deleted']
def clean(self):
super().clean()
@ -232,18 +223,8 @@ class TimePeriodForm(forms.ModelForm):
widgets = {
'start_time': widgets.TimeWidget(),
'end_time': widgets.TimeWidget(),
'desk': forms.HiddenInput(),
'agenda': forms.HiddenInput(),
}
exclude = []
def __init__(self, *args, **kwargs):
has_desk = kwargs.pop('has_desk')
super(TimePeriodForm, self).__init__(*args, **kwargs)
if has_desk:
del self.fields['agenda']
else:
del self.fields['desk']
exclude = ['agenda', 'desk']
def clean_end_time(self):
if self.cleaned_data['end_time'] <= self.cleaned_data['start_time']:
@ -258,14 +239,11 @@ class NewDeskForm(forms.ModelForm):
class Meta:
model = Desk
widgets = {
'agenda': forms.HiddenInput(),
}
exclude = ['slug']
exclude = ['agenda', 'slug']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['copy_from'].queryset = Desk.objects.filter(agenda=self.initial['agenda'])
self.fields['copy_from'].queryset = Desk.objects.filter(agenda=self.instance.agenda)
def save(self):
if self.cleaned_data['copy_from']:
@ -276,10 +254,7 @@ class NewDeskForm(forms.ModelForm):
class DeskForm(forms.ModelForm):
class Meta:
model = Desk
widgets = {
'agenda': forms.HiddenInput(),
}
exclude = []
exclude = ['agenda']
class TimePeriodExceptionForm(forms.ModelForm):
@ -287,10 +262,7 @@ class TimePeriodExceptionForm(forms.ModelForm):
class Meta:
model = TimePeriodException
fields = ['desk', 'start_datetime', 'end_datetime', 'label']
widgets = {
'desk': forms.HiddenInput(),
}
fields = ['start_datetime', 'end_datetime', 'label']
field_classes = {
'start_datetime': SplitDateTimeField,
'end_datetime': SplitDateTimeField,
@ -300,7 +272,7 @@ class TimePeriodExceptionForm(forms.ModelForm):
super().__init__(*args, **kwargs)
if self.instance.pk is not None:
del self.fields['all_desks']
elif 'desk' in self.initial and self.initial['desk'].agenda.desk_set.count() == 1:
elif self.instance.desk_id and self.instance.desk.agenda.desk_set.count() == 1:
del self.fields['all_desks']
def clean(self):
@ -316,15 +288,12 @@ class TimePeriodExceptionForm(forms.ModelForm):
class VirtualMemberForm(forms.ModelForm):
class Meta:
model = VirtualMember
fields = ['virtual_agenda', 'real_agenda']
widgets = {
'virtual_agenda': forms.HiddenInput(),
}
fields = ['real_agenda']
def __init__(self, *args, **kwargs):
super(VirtualMemberForm, self).__init__(*args, **kwargs)
self.fields['real_agenda'].queryset = Agenda.objects.filter(kind='meetings').exclude(
virtual_agendas__pk__in=[kwargs['initial']['agenda']]
virtual_agendas=self.instance.virtual_agenda
)
@ -528,10 +497,7 @@ class EventCancelForm(forms.ModelForm):
class AgendaNotificationsForm(forms.ModelForm):
class Meta:
model = AgendaNotificationsSettings
fields = '__all__'
widgets = {
'agenda': forms.HiddenInput(),
}
exclude = ['agenda']
@staticmethod
def update_choices(choices, settings):

View File

@ -662,10 +662,12 @@ class ManagedAgendaMixin(ViewableAgendaMixin):
def check_permissions(self, user):
return self.agenda.can_be_managed(user)
def get_initial(self):
initial = super(ManagedAgendaMixin, self).get_initial()
initial['agenda'] = self.agenda.id
return initial
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
if not kwargs.get('instance'):
kwargs['instance'] = self.model()
kwargs['instance'].agenda = self.agenda
return kwargs
def get_success_url(self):
return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.agenda.id})
@ -1177,17 +1179,19 @@ class ManagedDeskMixin(object):
raise PermissionDenied()
return super(ManagedDeskMixin, self).dispatch(request, *args, **kwargs)
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
if not kwargs.get('instance'):
kwargs['instance'] = self.model()
kwargs['instance'].desk = self.desk
return kwargs
def get_context_data(self, **kwargs):
context = super(ManagedDeskMixin, self).get_context_data(**kwargs)
context['desk'] = self.desk
context['agenda'] = self.desk.agenda
return context
def get_initial(self):
initial = super(ManagedDeskMixin, self).get_initial()
initial['desk'] = self.desk
return initial
def get_success_url(self):
return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.desk.agenda.id})
@ -1217,10 +1221,8 @@ class ManagedTimePeriodMixin(object):
def dispatch(self, request, *args, **kwargs):
self.time_period = self.get_object()
self.agenda = self.time_period.agenda
self.has_desk = False
if self.time_period.desk:
self.agenda = self.time_period.desk.agenda
self.has_desk = True
if not self.agenda.can_be_managed(request.user):
raise PermissionDenied()
@ -1292,9 +1294,11 @@ class AgendaDuplicate(ManagedAgendaMixin, FormView):
def get_success_url(self):
return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.new_agenda.pk})
def get_form_kwargs(self):
return super(FormView, self).get_form_kwargs()
def form_valid(self, form):
agenda = Agenda.objects.get(pk=self.kwargs['pk'])
self.new_agenda = agenda.duplicate(label=form.cleaned_data['label'])
self.new_agenda = self.agenda.duplicate(label=form.cleaned_data['label'])
return super().form_valid(form)
@ -1331,7 +1335,7 @@ class AgendaImportEventsView(ManagedAgendaMixin, FormView):
agenda = None
def get_form_kwargs(self):
kwargs = super(AgendaImportEventsView, self).get_form_kwargs()
kwargs = super(FormView, self).get_form_kwargs()
kwargs['agenda_pk'] = self.kwargs['pk']
return kwargs
@ -1499,12 +1503,16 @@ event_delete = EventDeleteView.as_view()
class AgendaAddResourceView(ManagedAgendaMixin, FormView):
template_name = 'chrono/manager_agenda_resource_form.html'
model = Event
form_class = AgendaResourceForm
def set_agenda(self, **kwargs):
self.agenda = get_object_or_404(Agenda, id=kwargs.get('pk'), kind='meetings')
def get_form_kwargs(self):
kwargs = super(FormView, self).get_form_kwargs()
kwargs['agenda'] = self.agenda
return kwargs
def form_valid(self, form):
self.agenda.resources.add(form.cleaned_data['resource'])
return super().form_valid(form)
@ -1532,7 +1540,7 @@ agenda_delete_resource = AgendaResourceDeleteView.as_view()
class AgendaAddMeetingTypeView(ManagedAgendaMixin, CreateView):
template_name = 'chrono/manager_meeting_type_form.html'
model = Event
model = MeetingType
form_class = NewMeetingTypeForm
@ -1612,6 +1620,9 @@ class AgendaAddTimePeriodView(ManagedDeskMixin, FormView):
template_name = 'chrono/manager_time_period_form.html'
form_class = TimePeriodAddForm
def get_form_kwargs(self):
return super(FormView, self).get_form_kwargs()
def form_valid(self, form):
process_time_period_add_form(form, desk=self.desk)
return super(AgendaAddTimePeriodView, self).form_valid(form)
@ -1624,6 +1635,9 @@ class VirtualAgendaAddTimePeriodView(ManagedAgendaMixin, FormView):
template_name = 'chrono/manager_time_period_form.html'
form_class = TimePeriodAddForm
def get_form_kwargs(self):
return super(FormView, self).get_form_kwargs()
def form_valid(self, form):
process_time_period_add_form(form, agenda=self.agenda)
return super(VirtualAgendaAddTimePeriodView, self).form_valid(form)
@ -1637,11 +1651,6 @@ class TimePeriodEditView(ManagedTimePeriodMixin, UpdateView):
model = TimePeriod
form_class = TimePeriodForm
def get_form_kwargs(self):
kwargs = super(TimePeriodEditView, self).get_form_kwargs()
kwargs['has_desk'] = self.has_desk
return kwargs
time_period_edit = TimePeriodEditView.as_view()
@ -1701,8 +1710,8 @@ class VirtualMemberAddView(ManagedAgendaMixin, CreateView):
model = VirtualMember
def get_form_kwargs(self):
kwargs = super(VirtualMemberAddView, self).get_form_kwargs()
kwargs['initial']['virtual_agenda'] = kwargs['initial']['agenda']
kwargs = super(CreateView, self).get_form_kwargs()
kwargs['instance'] = VirtualMember(virtual_agenda=self.agenda)
return kwargs