From ab344ba02f67ff78e40e7fce1be9279aa3a139ed Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sun, 16 Jun 2019 00:04:36 +0200 Subject: [PATCH] pedagogy: complete CRUD for UV model --- pedagogy/models.py | 6 +++ pedagogy/templates/pedagogy/guide.jinja | 13 ++++- pedagogy/urls.py | 1 + pedagogy/views.py | 66 +++++++++++++++++++++++-- 4 files changed, 81 insertions(+), 5 deletions(-) diff --git a/pedagogy/models.py b/pedagogy/models.py index 7bd0c955..9626b1da 100644 --- a/pedagogy/models.py +++ b/pedagogy/models.py @@ -44,8 +44,14 @@ class UV(models.Model): return user.is_in_group(settings.SITH_GROUP_PEDAGOGY_ADMIN_ID) def can_be_viewed_by(self, user): + """ + Only visible by subscribers + """ return user.is_subscribed + def __str__(self): + return self.code + code = models.CharField( _("code"), max_length=10, diff --git a/pedagogy/templates/pedagogy/guide.jinja b/pedagogy/templates/pedagogy/guide.jinja index a91c44db..fd6753ca 100644 --- a/pedagogy/templates/pedagogy/guide.jinja +++ b/pedagogy/templates/pedagogy/guide.jinja @@ -6,7 +6,18 @@ {% endblock %} {% block content %} + {% if can_create_uv(user) %} +

+ {% trans %}Create UV{% endtrans %} +

+ {% endif %} {% for uv in object_list %} - {{ uv.code }} +

+ {{ uv.code }} + {% if user.is_owner(uv) -%} + {% trans %}Edit{% endtrans %} + {% trans %}Delete{% endtrans %} + {%- endif -%} +

{% endfor %} {% endblock content %} \ No newline at end of file diff --git a/pedagogy/urls.py b/pedagogy/urls.py index 7f826428..c5d7b8b9 100644 --- a/pedagogy/urls.py +++ b/pedagogy/urls.py @@ -46,6 +46,7 @@ urlpatterns = [ # Administration : Create Update Delete Edit url(r"^uv/create$", UVCreateView.as_view(), name="uv_create"), url(r"^uv/(?P[0-9]+)/delete$", UVDeleteView.as_view(), name="uv_delete"), + url(r"^uv/(?P[0-9]+)/edit$", UVUpdateView.as_view(), name="uv_update"), url( r"^department/create$", EducationDepartmentCreateView.as_view(), diff --git a/pedagogy/views.py b/pedagogy/views.py index 7427bc17..3b344228 100644 --- a/pedagogy/views.py +++ b/pedagogy/views.py @@ -22,7 +22,15 @@ # # -from django.views.generic import CreateView, DeleteView, DetailView, ListView, FormView +from django.views.generic import ( + CreateView, + DeleteView, + DetailView, + UpdateView, + ListView, + FormView, + View, +) from django.core.urlresolvers import reverse_lazy from core.views import ( @@ -36,6 +44,32 @@ from core.views import ( from pedagogy.forms import UVForm from pedagogy.models import UV +# Some mixins + + +class CanCreateUVFunctionMixin(View): + """ + Add the function can_create_uv(user) into the template + """ + + @staticmethod + def can_create_uv(user): + """ + Creates a dummy instance of UV and test is_owner + """ + return user.is_owner(UV()) + + def get_context_data(self, **kwargs): + """ + Pass the function to the template + """ + kwargs = super(CanCreateUVFunctionMixin, self).get_context_data(**kwargs) + kwargs["can_create_uv"] = self.can_create_uv + return kwargs + + +# Acutal views + class UVDetailFormView(DetailFormView): """ @@ -54,7 +88,7 @@ class UVCommentDetailView(DetailView): pass -class UVListView(CanViewMixin, ListView): +class UVListView(CanViewMixin, CanCreateUVFunctionMixin, ListView): """ UV guide main page """ @@ -108,12 +142,36 @@ class UVCreateView(CanCreateMixin, CreateView): return reverse_lazy("pedagogy:uv_detail", kwargs={"uv_id": self.object.id}) -class UVDeleteView(DeleteView): +class UVDeleteView(CanEditPropMixin, DeleteView): """ Allow to delete an UV (Privileged) """ - pass + model = UV + pk_url_kwarg = "uv_id" + template_name = "core/delete_confirm.jinja" + + def get_success_url(self): + return reverse_lazy("pedagogy:guide") + + +class UVUpdateView(CanEditPropMixin, UpdateView): + """ + Allow to edit an UV (Privilegied) + """ + + model = UV + form_class = UVForm + pk_url_kwarg = "uv_id" + template_name = "core/edit.jinja" + + def get_form_kwargs(self): + kwargs = super(UVUpdateView, self).get_form_kwargs() + kwargs["author_id"] = self.request.user.id + return kwargs + + def get_success_url(self): + return reverse_lazy("pedagogy:uv_detail", kwargs={"uv_id": self.object.id}) class EducationDepartmentCreateView(CreateView):