diff --git a/app/interface/forms.py b/app/interface/forms.py index 85aa1eb..9ac708a 100644 --- a/app/interface/forms.py +++ b/app/interface/forms.py @@ -25,14 +25,16 @@ class BaseForm(forms.Form): class ProjectForm(forms.ModelForm, BaseForm): - class Meta: model = models.Project - fields = ['name', 'description', 'event_date'] + fields = ['name', 'description', 'modules', 'event_date'] #widgets = { # 'event_date': forms.DateTimeInput(attrs={'type': 'date'}) #} + modules = forms.MultipleChoiceField(choices=[ (x, x.title()) for x in models.settings.POLYPHONIC_MODULES ], + widget=forms.CheckboxSelectMultiple, required=False) + class ResourceForm(forms.ModelForm, BaseForm): class Meta: diff --git a/app/interface/models.py b/app/interface/models.py index 6c53766..6aeec3d 100644 --- a/app/interface/models.py +++ b/app/interface/models.py @@ -180,6 +180,9 @@ class Module(models.Model): name = models.SlugField(max_length=20, choices=[ (x, x.title()) for x in settings.POLYPHONIC_MODULES ]) project = models.ForeignKey(Project, related_name="modules", on_delete=models.CASCADE) + def __str__(self): + return self.name + def resource_key(resource, filename): return f'{resource.project.folder}/resources/{filename}' diff --git a/app/interface/views.py b/app/interface/views.py index fbfa96d..1f105e5 100644 --- a/app/interface/views.py +++ b/app/interface/views.py @@ -270,11 +270,16 @@ class ProjectCreateView(EnsembleMixin, CreateView): title = "Add a new project" form_class = forms.ProjectForm + def form_valid(self, form): self.object = form.save(commit=False) self.object.ensemble = self.ensemble self.object.owner = self.request.user self.object.save() + + for module in form.cleaned_data['modules']: + self.object.modules.create(name=module) + return redirect('project_detail', project=self.object.pk) class ProjectDetailView(ProjectMixin, DetailView): @@ -306,12 +311,25 @@ class ProjectUpdateView(ProjectMixin, UpdateView): def get_object(self): return self.project + def get_initial(self): + data = super().get_initial() + data['modules'] = self.object.active_modules + print(data) + return data + + def form_valid(self, form): + self.object = form.save() + current = set(self.object.active_modules) + desired = set(form.cleaned_data['modules']) + self.object.modules.exclude(name__in=desired).delete() + for module in desired-current: + self.object.modules.create(name=module) + return redirect('project_detail', self.kwargs['project']) + @property def cancel_url(self): - return self.get_success_url() + return resolve_url('project_detail', self.kwargs['project']) - def get_success_url(self): - return resolve_url('project_detail', project=self.kwargs['project']) # Old Makefile from submission module #class ProjectMakefileView(EnsembleMixin, DetailView):