mirror of
https://github.com/kristoferssolo/FOSSDB.git
synced 2025-10-21 17:50:35 +00:00
Added Project create view
This commit is contained in:
parent
dd9d2bee21
commit
2528d7d7ad
@ -4,7 +4,7 @@ from . import views
|
||||
|
||||
urlpatterns = [
|
||||
path("", views.index, name="index"),
|
||||
path("add/", views.add_project, name="add-project"),
|
||||
path("add/", views.ProjectCreateView.as_view(), name="add-project"),
|
||||
path("<str:username>/<str:project_name>/", views.ProjectDetailView.as_view(), name="project-detail"),
|
||||
path("<str:username>/<str:project_name>/update/", views.ProjectUpdateView.as_view(), name="project-update"),
|
||||
path("<str:username>/<str:project_name>/delete/", views.ProjectDeleteView.as_view(), name="project-delete"),
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
from django import forms
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.decorators import login_required, permission_required
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
|
||||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django.urls import reverse_lazy
|
||||
@ -14,41 +13,6 @@ from .programming_language.forms import ProgrammingLanguageForm
|
||||
User = settings.AUTH_USER_MODEL
|
||||
|
||||
|
||||
@login_required(login_url="login/")
|
||||
@permission_required("fossdb.add_project", login_url="login/", raise_exception=True)
|
||||
def add_project(request):
|
||||
project_form = ProjectForm(request.POST or None)
|
||||
hosting_platform_form = HostingPlatformForm(request.POST or None)
|
||||
programming_language_form = ProgrammingLanguageForm(request.POST or None)
|
||||
|
||||
_forms: dict[str, forms.ModelForm] = {
|
||||
"project_form": project_form,
|
||||
"hosting_platform_form": hosting_platform_form,
|
||||
"programming_language_form": programming_language_form,
|
||||
}
|
||||
|
||||
if request.method == "POST":
|
||||
if all([form.is_valid() for form in _forms.values()]):
|
||||
project = project_form.save(commit=False)
|
||||
project.author = request.user
|
||||
project.save()
|
||||
|
||||
hosting_platform = hosting_platform_form.save(commit=False)
|
||||
hosting_platform.project = project
|
||||
hosting_platform.save()
|
||||
|
||||
# TODO: allow adding multiple languages
|
||||
programming_language = programming_language_form.save(commit=False)
|
||||
programming_language.project = project
|
||||
programming_language.save()
|
||||
|
||||
project.save_m2m()
|
||||
return redirect("index")
|
||||
|
||||
context = {"title": "Add project", **_forms}
|
||||
return render(request, "fossdb/add_project.html", context)
|
||||
|
||||
|
||||
def index(request):
|
||||
context = {
|
||||
"title": "FOSSDB",
|
||||
@ -57,6 +21,39 @@ def index(request):
|
||||
return render(request, "fossdb/index.html", context)
|
||||
|
||||
|
||||
class ProjectCreateView(LoginRequiredMixin, CreateView):
|
||||
model = Project
|
||||
form_class = ProjectForm
|
||||
template_name = "fossdb/add_project.html"
|
||||
|
||||
def form_valid(self, form):
|
||||
form.instance.owner = self.request.user
|
||||
response = super().form_valid(form)
|
||||
|
||||
hosting_platform_form = HostingPlatformForm(self.request.POST, instance=self.object)
|
||||
if hosting_platform_form.is_valid():
|
||||
hosting_platform = hosting_platform_form.save(commit=False)
|
||||
hosting_platform.project = self.object
|
||||
hosting_platform.save()
|
||||
|
||||
# TODO: allow adding multiple languages
|
||||
programming_language_form = ProgrammingLanguageForm(self.request.POST, instance=self.object)
|
||||
if programming_language_form.is_valid():
|
||||
programming_language = programming_language_form.save(commit=False)
|
||||
programming_language.project = self.object
|
||||
programming_language.save()
|
||||
|
||||
return response
|
||||
|
||||
def get_context_data(self, *args, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context["title"] = "Add project"
|
||||
context["project_form"] = ProjectForm()
|
||||
context["hosting_platform_form"] = HostingPlatformForm()
|
||||
context["programming_language_form"] = ProgrammingLanguageForm()
|
||||
return context
|
||||
|
||||
|
||||
class ProjectDetailView(DetailView):
|
||||
model = Project
|
||||
template_name = "fossdb/detailed_view.html"
|
||||
|
||||
@ -7,25 +7,33 @@
|
||||
<p>{{ project.name }}</p>
|
||||
<p>{{ project.description }}</p>
|
||||
<ul>
|
||||
{% for license in project.licenses.all %}
|
||||
{% for license in project.license.all %}
|
||||
<li>
|
||||
<a href="{{ license.url }}">{{ license.short_name }}</a>
|
||||
<a href="{{ license.url }}">{{ license }}</a>
|
||||
</li>
|
||||
{% empty %}
|
||||
<p>No license</p>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<ul>
|
||||
{% for language in project.projectprogramminglanguage_set.all %}
|
||||
<li>{{ language.language }} | {{ language.percentage }}%</li>
|
||||
{% for language in project.programming_language.all %}
|
||||
<li>{{ language }}%</li>
|
||||
{% empty %}
|
||||
<p>No language</p>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<ul>
|
||||
{% for tag in project.tag.all %}
|
||||
<li>{{ tag.name }}</li>
|
||||
{% for os in project.oprating_system.all %}
|
||||
<li>{{ os.version }}</li>
|
||||
{% empty %}
|
||||
<p>No OS</p>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<ul>
|
||||
{% for tag in project.tag.all %}
|
||||
<li>{{ tag }}</li>
|
||||
{% empty %}
|
||||
<p>No tag</p>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<p>{{ project.date_created|date:"d.m.Y, G:i" }}</p>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user