diff --git a/FOSSDB/apps/fossdb/views.py b/FOSSDB/apps/fossdb/views.py index a152097..5d8b5e7 100644 --- a/FOSSDB/apps/fossdb/views.py +++ b/FOSSDB/apps/fossdb/views.py @@ -1,5 +1,3 @@ -from django import forms -from django.conf import settings from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin from django.shortcuts import get_object_or_404, redirect, render from django.urls import reverse_lazy @@ -10,8 +8,6 @@ from .hosting_platform.forms import HostingPlatformForm from .models import Project from .programming_language.forms import ProgrammingLanguageForm -User = settings.AUTH_USER_MODEL - def index(request): context = { @@ -25,6 +21,8 @@ class ProjectCreateView(LoginRequiredMixin, CreateView): model = Project form_class = ProjectForm template_name = "fossdb/add_project.html" + login_url = "/login/" + redirect_field_name = "redirect_to" def form_valid(self, form): form.instance.owner = self.request.user @@ -69,13 +67,30 @@ class ProjectDetailView(DetailView): class ProjectUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView): model = Project template_name = "fossdb/update_view.html" - form_class = ( - ProjectForm, - HostingPlatformForm, - ProgrammingLanguageForm, - ) + form_class = ProjectForm slug_field = "name" slug_url_kwarg = "project_name" + login_url = "/login/" + redirect_field_name = "redirect_to" + + 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_queryset(self): queryset = super().get_queryset() @@ -84,13 +99,31 @@ class ProjectUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView): def test_func(self): return self.get_object().owner == self.request.user + def handle_no_permission(self): + return redirect("index") + + def get_context_data(self, *args, **kwargs): + context = super().get_context_data(**kwargs) + if self.request.POST: + context["project_form"] = ProjectForm(self.request.POST, instance=self.object) + context["hosting_platform_form"] = HostingPlatformForm(self.request.POST, instance=self.object) + context["programming_language_form"] = ProgrammingLanguageForm(self.request.POST, instance=self.object) + else: + context["project_form"] = ProjectForm(instance=self.object) + context["hosting_platform_form"] = HostingPlatformForm(instance=self.object) + context["programming_language_form"] = ProgrammingLanguageForm(instance=self.object) + + return context + class ProjectDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView): model = Project template_name = "fossdb/delete_view.html" slug_field = "name" slug_url_kwarg = "project_name" - success_url = reverse_lazy("index") + login_url = "/login/" + redirect_field_name = "redirect_to" + success_url = "/" def get_queryset(self): queryset = super().get_queryset() @@ -98,3 +131,6 @@ class ProjectDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView): def test_func(self): return self.get_object().owner == self.request.user + + def handle_no_permission(self): + return redirect("index") diff --git a/FOSSDB/settings.py b/FOSSDB/settings.py index 8d9989d..c840486 100644 --- a/FOSSDB/settings.py +++ b/FOSSDB/settings.py @@ -136,6 +136,7 @@ MEDIA_ROOT = BASE_PATH.joinpath("media") DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" LOGIN_REDIRECT_URL = "/" LOGOUT_REDIRECT_URL = "/" +LOGIN_URL = "login/" # HTTPS settings # SESSION_COOKIE_SECURE = True diff --git a/templates/fossdb/update_view.html b/templates/fossdb/update_view.html index 38b1f46..48c0d7c 100644 --- a/templates/fossdb/update_view.html +++ b/templates/fossdb/update_view.html @@ -1,20 +1,12 @@ {% extends "layout.html" %} -{% block title %}Update {{ project.name }}{% endblock %} +{% block title %}Edit {{ project.name }}{% endblock %} {% block content %}
{% endblock %} diff --git a/templates/registration/login.html b/templates/registration/login.html index e1ca078..c8eb1e4 100644 --- a/templates/registration/login.html +++ b/templates/registration/login.html @@ -4,7 +4,8 @@ {% block meta %}{% endblock %} {% block content %}