return fields
def __init__(self, *args, **kwargs):
+ user = kwargs.pop('user', None)
super().__init__(*args, **kwargs)
emission = kwargs.get('initial', {}).get('emission')
+ free_datetime = bool(
+ (user and user.has_perm('emissions.add_diffusion')) or not emission.schedule_set.exists()
+ )
diffusion_fields = self.get_diffusion_fields(emission)
for field_name in list(self.fields.keys()):
- if field_name.endswith('_diffusion') and not field_name in diffusion_fields:
- del self.fields[field_name]
+ if field_name.endswith('_diffusion'):
+ if field_name not in diffusion_fields:
+ # remove extra diffusion fields
+ del self.fields[field_name]
+ elif not free_datetime:
+ # turn diffusion fields in select widgets for users
+ self.fields[field_name].widget = DiffusionDateTimeWidget(emission)
def save(self, commit=True):
episode = super().save(commit=commit)
raise PermissionDenied()
return super().get_form(*args, **kwargs)
+ def get_form_kwargs(self):
+ kwargs = super().get_form_kwargs()
+ kwargs['user'] = self.request.user
+ return kwargs
+
def get_initial(self):
initial = super().get_initial()
initial['emission'] = Emission.objects.get(slug=self.kwargs.get('emission_slug'))