optimize views
This commit is contained in:
@@ -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
|
|
||||||
|
|||||||
@@ -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"),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -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)
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user