Added module management

This commit is contained in:
Tris Forster 2023-03-01 13:15:09 +11:00
parent f22961ad44
commit 4268b66b27
3 changed files with 28 additions and 5 deletions

View File

@ -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:

View File

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

View File

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