mirror of
https://github.com/kristoferssolo/FOSSDB.git
synced 2025-10-21 17:50:35 +00:00
Created ProgrammingLanguageInlineFormSet
Users can now save multiple project programming languages at the same time
This commit is contained in:
parent
b23421702f
commit
ccee378045
@ -1,4 +1,5 @@
|
|||||||
from django import forms
|
from django import forms
|
||||||
|
from django.forms import inlineformset_factory
|
||||||
|
|
||||||
from .models import HostingPlatform, ProgrammingLanguage, Project, ProjectHostingPlatform, ProjectProgrammingLanguage
|
from .models import HostingPlatform, ProgrammingLanguage, Project, ProjectHostingPlatform, ProjectProgrammingLanguage
|
||||||
|
|
||||||
@ -61,7 +62,19 @@ class ProjectForm(forms.ModelForm):
|
|||||||
"placeholder": "Description",
|
"placeholder": "Description",
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
"license": forms.CheckboxSelectMultiple(),
|
# "license": forms.CheckboxSelectMultiple(),
|
||||||
"tag": forms.CheckboxSelectMultiple(),
|
# "tag": forms.CheckboxSelectMultiple(),
|
||||||
"operating_system": forms.CheckboxSelectMultiple(),
|
# "operating_system": forms.CheckboxSelectMultiple(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ProgrammingLanguageInlineFormSet = inlineformset_factory(
|
||||||
|
Project,
|
||||||
|
ProjectProgrammingLanguage,
|
||||||
|
fields=(
|
||||||
|
"programming_language",
|
||||||
|
"percentage",
|
||||||
|
),
|
||||||
|
extra=1,
|
||||||
|
can_delete=True,
|
||||||
|
)
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
|
||||||
from django.forms import inlineformset_factory
|
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
from django.views.generic import CreateView, DeleteView, DetailView, UpdateView
|
from django.views.generic import CreateView, DeleteView, DetailView, UpdateView
|
||||||
|
|
||||||
@ -7,15 +6,8 @@ from django_filters.views import FilterView
|
|||||||
|
|
||||||
from .filters import ProjectFilter
|
from .filters import ProjectFilter
|
||||||
|
|
||||||
from .forms import HostingPlatformForm, ProgrammingLanguageForm, ProjectForm
|
from .forms import HostingPlatformForm, ProgrammingLanguageInlineFormSet, ProjectForm
|
||||||
from .models import Project, ProjectProgrammingLanguage
|
from .models import Project
|
||||||
|
|
||||||
ProgrammingLanguageInlineFormset = inlineformset_factory(
|
|
||||||
Project,
|
|
||||||
ProjectProgrammingLanguage,
|
|
||||||
form=ProgrammingLanguageForm,
|
|
||||||
extra=1,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class ProjectListView(FilterView):
|
class ProjectListView(FilterView):
|
||||||
@ -35,30 +27,29 @@ class ProjectCreateView(LoginRequiredMixin, CreateView):
|
|||||||
|
|
||||||
def get_context_data(self, *args, **kwargs):
|
def get_context_data(self, *args, **kwargs):
|
||||||
data = super().get_context_data(**kwargs)
|
data = super().get_context_data(**kwargs)
|
||||||
data["hosting_platform"] = HostingPlatformForm(self.request.POST or None, prefix="hosting")
|
data["hosting_platform"] = HostingPlatformForm(self.request.POST or None)
|
||||||
data["programming_language"] = ProgrammingLanguageInlineFormset(self.request.POST or None, prefix="language")
|
data["programming_languages"] = ProgrammingLanguageInlineFormSet(self.request.POST or None)
|
||||||
data["empty_form"] = ProgrammingLanguageInlineFormset(prefix="language_empty")
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
context = self.get_context_data()
|
context = self.get_context_data()
|
||||||
|
|
||||||
form.instance.owner = self.request.user
|
form.instance.owner = self.request.user
|
||||||
|
|
||||||
|
self.object = form.save() # Save project form
|
||||||
|
|
||||||
hosting_platform = context["hosting_platform"]
|
hosting_platform = context["hosting_platform"]
|
||||||
programming_language = context["programming_language"]
|
|
||||||
self.object = form.save()
|
|
||||||
if hosting_platform.is_valid():
|
if hosting_platform.is_valid():
|
||||||
hosting_platform.instance.project = self.object
|
hosting_platform = hosting_platform.save(commit=False)
|
||||||
|
hosting_platform.project = self.object
|
||||||
hosting_platform.save()
|
hosting_platform.save()
|
||||||
# TODO: allow adding multiple languages
|
|
||||||
if programming_language.is_valid():
|
programming_languages = context["programming_languages"]
|
||||||
for instance in programming_language.save(commit=False):
|
if programming_languages.is_valid():
|
||||||
instance.project = self.object
|
programming_languages.instance = self.object
|
||||||
instance.save()
|
programming_languages.save()
|
||||||
programming_language.save_m2m()
|
|
||||||
if hosting_platform.is_valid() and programming_language.is_valid():
|
return super().form_valid(form)
|
||||||
return super().form_valid(form)
|
|
||||||
else:
|
|
||||||
return self.render_to_response(self.get_context_data(form=form))
|
|
||||||
|
|
||||||
|
|
||||||
class ProjectDetailView(DetailView):
|
class ProjectDetailView(DetailView):
|
||||||
@ -85,12 +76,30 @@ class ProjectUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
|
|||||||
return redirect("login")
|
return redirect("login")
|
||||||
|
|
||||||
def get_context_data(self, *args, **kwargs):
|
def get_context_data(self, *args, **kwargs):
|
||||||
data = super(ProjectUpdateView, self).get_context_data(**kwargs)
|
data = super().get_context_data(**kwargs)
|
||||||
data["hosting_platform"] = HostingPlatformForm(self.request.POST or None, instance=self.object.projecthostingplatform, prefix="hosting")
|
data["hosting_platform"] = HostingPlatformForm(self.request.POST or None, instance=self.object.projecthostingplatform)
|
||||||
data["programming_language"] = ProgrammingLanguageInlineFormset(self.request.POST or None, instance=self.object, prefix="language")
|
data["programming_languages"] = ProgrammingLanguageInlineFormSet(self.request.POST or None, instance=self.object)
|
||||||
data["empty_form"] = ProgrammingLanguageInlineFormset(prefix="language_empty")
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
def form_valid(self, form):
|
||||||
|
context = self.get_context_data()
|
||||||
|
|
||||||
|
form.instance.owner = self.request.user
|
||||||
|
|
||||||
|
self.object = form.save() # Save project form
|
||||||
|
|
||||||
|
hosting_platform = context["hosting_platform"]
|
||||||
|
if hosting_platform.is_valid():
|
||||||
|
hosting_platform.project = self.object
|
||||||
|
hosting_platform.save()
|
||||||
|
|
||||||
|
programming_languages = context["programming_languages"]
|
||||||
|
if programming_languages.is_valid():
|
||||||
|
programming_languages.instance = self.object
|
||||||
|
programming_languages.save()
|
||||||
|
|
||||||
|
return super().form_valid(form)
|
||||||
|
|
||||||
|
|
||||||
class ProjectDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
|
class ProjectDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
|
||||||
model = Project
|
model = Project
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user