optimize views

This commit is contained in:
2022-07-30 21:45:12 +00:00
parent 718263b740
commit 3e79143946
5 changed files with 23 additions and 63 deletions

View File

@@ -12,6 +12,7 @@ from django.utils.text import slugify
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from documents import create_pad from documents import create_pad
from documents.api import get_pad_link
from fet2020.utils import create_random_id from fet2020.utils import create_random_id
from .managers import TaskManager from .managers import TaskManager
@@ -124,6 +125,12 @@ class Document(models.Model):
verbose_name = "Dokument" verbose_name = "Dokument"
verbose_name_plural = "Dokumente" verbose_name_plural = "Dokumente"
def __str__(self):
return self.title
def get_absolute_url(self):
return get_pad_link(self.etherpad_key)
def clean(self): def clean(self):
pad_name = slugify(str(self.slug_id) + "-" + self.title[:40]) pad_name = slugify(str(self.slug_id) + "-" + self.title[:40])
if len(pad_name) > 50: if len(pad_name) > 50:
@@ -139,6 +146,3 @@ class Document(models.Model):
raise ValidationError( raise ValidationError(
_(f"Etherpad '{pad_name}' konnte nicht erstellt werden."), _(f"Etherpad '{pad_name}' konnte nicht erstellt werden."),
) )
def __str__(self):
return self.title

View File

@@ -2,15 +2,15 @@ from django.urls import path
from . import apps from . import apps
from . import views from . import views
from .views import TaskCreate, TaskDetail, TaskUpdate, DocumentCreate from .views import TaskCreateView, TaskDetailView, TaskUpdateView, DocumentCreateView
app_name = apps.TasksConfig.name app_name = apps.TasksConfig.name
urlpatterns = [ urlpatterns = [
path("", views.index, name="index"), path("", views.index, name="index"),
path("add/", TaskCreate.as_view(), name="task-create"), path("add/", TaskCreateView.as_view(), name="task-create"),
path("<slug:slug>/", TaskDetail.as_view(), name="task-detail"), path("<slug:slug>/", TaskDetailView.as_view(), name="task-detail"),
path("<slug:slug>/update/", TaskUpdate.as_view(), name="task-update"), path("<slug:slug>/update/", TaskUpdateView.as_view(), name="task-update"),
path("<slug:slug>/add/", DocumentCreate.as_view(), name="docu-create"), path("<slug:slug>/add/", DocumentCreateView.as_view(), name="docu-create"),
] ]

View File

@@ -75,7 +75,7 @@ def index(request):
return render(request, "tasks/index.html", context) return render(request, "tasks/index.html", context)
class TaskCreate(LoginRequiredMixin, CreateView): class TaskCreateView(LoginRequiredMixin, CreateView):
model = Task model = Task
success_url = reverse_lazy("tasks:index") success_url = reverse_lazy("tasks:index")
template_name = "tasks/task_create.html" template_name = "tasks/task_create.html"
@@ -92,42 +92,18 @@ class TaskCreate(LoginRequiredMixin, CreateView):
return kwargs return kwargs
class TaskUpdate(LoginRequiredMixin, UpdateView): class TaskUpdateView(LoginRequiredMixin, UpdateView):
form_class = TaskUpdateForm form_class = TaskUpdateForm
model = Task model = Task
template_name = "tasks/task_update.html" template_name = "tasks/task_update.html"
slug = None
task_list = None
def form_valid(self, form): def form_valid(self, form):
add_log_action(self.request, form, "tasks", "task", False) add_log_action(self.request, form, "tasks", "task", False)
return super().form_valid(form) return super().form_valid(form)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["task_list"] = self.task_list
return context
def get_form_kwargs(self): class TaskDetailView(LoginRequiredMixin, DetailView):
kwargs = super().get_form_kwargs()
kwargs["task_list"] = self.task_list
return kwargs
def get_initial(self):
self.slug = self.kwargs.get("slug")
self.task_list = Task.objects.get(slug=self.slug).task_list
def get_success_url(self):
kwargs = {
"slug": self.slug,
}
return reverse("tasks:task-detail", kwargs=kwargs)
class TaskDetail(LoginRequiredMixin, DetailView):
model = Task model = Task
success_url = reverse_lazy("tasks:index")
template_name = "tasks/task_detail.html" template_name = "tasks/task_detail.html"
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
@@ -144,30 +120,16 @@ class TaskDetail(LoginRequiredMixin, DetailView):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
docus = Document.objects.filter(task__id=self.object.id).order_by("-date") docus = Document.objects.filter(task__id=self.object.id).order_by("-date")
documents = deque([]) context["documents"] = docus
# list of etherpad url-link of any documents context["topic"] = Topic.objects.get(task_list=self.object.task_list)
for elem in docus:
documents.append(
{
"title": elem.title,
"date": elem.date,
"etherpad_key": get_pad_link(elem.etherpad_key),
}
)
context["documents"] = documents
context["topic"] = Topic.objects.filter(task_list=self.object.task_list).first()
return context return context
class DocumentCreate(LoginRequiredMixin, CreateView): class DocumentCreateView(LoginRequiredMixin, CreateView):
model = Document model = Document
template_name = "tasks/attachment_create.html" template_name = "tasks/attachment_create.html"
form_class = DocumentCreateForm form_class = DocumentCreateForm
slug = None
def form_valid(self, form): def form_valid(self, form):
form.instance.created_by = self.request.user form.instance.created_by = self.request.user
add_log_action(self.request, form, "tasks", "document", True) add_log_action(self.request, form, "tasks", "document", True)
@@ -175,15 +137,9 @@ class DocumentCreate(LoginRequiredMixin, CreateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context["task"] = Task.objects.get(slug=self.slug) slug = self.kwargs.get("slug")
context["task"] = Task.objects.get(slug=slug)
return context return context
def get_initial(self):
self.slug = self.kwargs.get("slug")
def get_success_url(self): def get_success_url(self):
kwargs = { return reverse("tasks:task-detail", kwargs=self.kwargs)
"slug": self.slug,
}
return reverse("tasks:task-detail", kwargs=kwargs)

View File

@@ -31,7 +31,7 @@
</a> </a>
{% for document in documents %} {% for document in documents %}
<a href="{{ document.etherpad_key }}" class="flex justify-between items-center gap-2"> <a href="{{ document.get_absolute_url }}" class="flex justify-between items-center gap-2">
<h3 class="text-gray-800 dark:text-gray-200">{{ document.title }}</h2> <h3 class="text-gray-800 dark:text-gray-200">{{ document.title }}</h2>
<span class=" text-gray-700 dark:text-gray-300">{{ document.date }}<span class="ml-2 hidden sm:inline-block"><i class="fa-solid fa-angle-right text-gray-400 dark:text-gray-600"></i></span> <span class=" text-gray-700 dark:text-gray-300">{{ document.date }}<span class="ml-2 hidden sm:inline-block"><i class="fa-solid fa-angle-right text-gray-400 dark:text-gray-600"></i></span>
</a> </a>

View File

@@ -77,7 +77,7 @@
{{ form.note }} {{ form.note }}
</label> </label>
<input type="hidden" name="task_list" value="{{ task_list.id }}" id="id_task_list"> <input type="hidden" name="task_list" value="{{ task.task_list.id }}" id="id_task_list">
<div class="flex flex-col-reverse sm:flex-row gap-3 justify-end pt-4 sm:pt-0"> <div class="flex flex-col-reverse sm:flex-row gap-3 justify-end pt-4 sm:pt-0">
<a href="{% url 'admin:tasks_task_change' task.id %}" class="block btn btn-secondary-proprietary">Task im Admin bearbeiten</a> <a href="{% url 'admin:tasks_task_change' task.id %}" class="block btn btn-secondary-proprietary">Task im Admin bearbeiten</a>