Added module management
This commit is contained in:
parent
f22961ad44
commit
4268b66b27
@ -25,14 +25,16 @@ class BaseForm(forms.Form):
|
|||||||
|
|
||||||
class ProjectForm(forms.ModelForm, BaseForm):
|
class ProjectForm(forms.ModelForm, BaseForm):
|
||||||
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.Project
|
model = models.Project
|
||||||
fields = ['name', 'description', 'event_date']
|
fields = ['name', 'description', 'modules', 'event_date']
|
||||||
#widgets = {
|
#widgets = {
|
||||||
# 'event_date': forms.DateTimeInput(attrs={'type': 'date'})
|
# '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 ResourceForm(forms.ModelForm, BaseForm):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|||||||
@ -180,6 +180,9 @@ class Module(models.Model):
|
|||||||
name = models.SlugField(max_length=20, choices=[ (x, x.title()) for x in settings.POLYPHONIC_MODULES ])
|
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)
|
project = models.ForeignKey(Project, related_name="modules", on_delete=models.CASCADE)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
def resource_key(resource, filename):
|
def resource_key(resource, filename):
|
||||||
return f'{resource.project.folder}/resources/{filename}'
|
return f'{resource.project.folder}/resources/{filename}'
|
||||||
|
|
||||||
|
|||||||
@ -270,11 +270,16 @@ class ProjectCreateView(EnsembleMixin, CreateView):
|
|||||||
title = "Add a new project"
|
title = "Add a new project"
|
||||||
form_class = forms.ProjectForm
|
form_class = forms.ProjectForm
|
||||||
|
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
self.object = form.save(commit=False)
|
self.object = form.save(commit=False)
|
||||||
self.object.ensemble = self.ensemble
|
self.object.ensemble = self.ensemble
|
||||||
self.object.owner = self.request.user
|
self.object.owner = self.request.user
|
||||||
self.object.save()
|
self.object.save()
|
||||||
|
|
||||||
|
for module in form.cleaned_data['modules']:
|
||||||
|
self.object.modules.create(name=module)
|
||||||
|
|
||||||
return redirect('project_detail', project=self.object.pk)
|
return redirect('project_detail', project=self.object.pk)
|
||||||
|
|
||||||
class ProjectDetailView(ProjectMixin, DetailView):
|
class ProjectDetailView(ProjectMixin, DetailView):
|
||||||
@ -306,12 +311,25 @@ class ProjectUpdateView(ProjectMixin, UpdateView):
|
|||||||
def get_object(self):
|
def get_object(self):
|
||||||
return self.project
|
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
|
@property
|
||||||
def cancel_url(self):
|
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
|
# Old Makefile from submission module
|
||||||
#class ProjectMakefileView(EnsembleMixin, DetailView):
|
#class ProjectMakefileView(EnsembleMixin, DetailView):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user