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 documents import create_pad
|
||||
from documents.api import get_pad_link
|
||||
from fet2020.utils import create_random_id
|
||||
from .managers import TaskManager
|
||||
|
||||
@@ -124,6 +125,12 @@ class Document(models.Model):
|
||||
verbose_name = "Dokument"
|
||||
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):
|
||||
pad_name = slugify(str(self.slug_id) + "-" + self.title[:40])
|
||||
if len(pad_name) > 50:
|
||||
@@ -139,6 +146,3 @@ class Document(models.Model):
|
||||
raise ValidationError(
|
||||
_(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 views
|
||||
from .views import TaskCreate, TaskDetail, TaskUpdate, DocumentCreate
|
||||
from .views import TaskCreateView, TaskDetailView, TaskUpdateView, DocumentCreateView
|
||||
|
||||
|
||||
app_name = apps.TasksConfig.name
|
||||
|
||||
urlpatterns = [
|
||||
path("", views.index, name="index"),
|
||||
path("add/", TaskCreate.as_view(), name="task-create"),
|
||||
path("<slug:slug>/", TaskDetail.as_view(), name="task-detail"),
|
||||
path("<slug:slug>/update/", TaskUpdate.as_view(), name="task-update"),
|
||||
path("<slug:slug>/add/", DocumentCreate.as_view(), name="docu-create"),
|
||||
path("add/", TaskCreateView.as_view(), name="task-create"),
|
||||
path("<slug:slug>/", TaskDetailView.as_view(), name="task-detail"),
|
||||
path("<slug:slug>/update/", TaskUpdateView.as_view(), name="task-update"),
|
||||
path("<slug:slug>/add/", DocumentCreateView.as_view(), name="docu-create"),
|
||||
]
|
||||
|
||||
@@ -75,7 +75,7 @@ def index(request):
|
||||
return render(request, "tasks/index.html", context)
|
||||
|
||||
|
||||
class TaskCreate(LoginRequiredMixin, CreateView):
|
||||
class TaskCreateView(LoginRequiredMixin, CreateView):
|
||||
model = Task
|
||||
success_url = reverse_lazy("tasks:index")
|
||||
template_name = "tasks/task_create.html"
|
||||
@@ -92,42 +92,18 @@ class TaskCreate(LoginRequiredMixin, CreateView):
|
||||
return kwargs
|
||||
|
||||
|
||||
class TaskUpdate(LoginRequiredMixin, UpdateView):
|
||||
class TaskUpdateView(LoginRequiredMixin, UpdateView):
|
||||
form_class = TaskUpdateForm
|
||||
model = Task
|
||||
template_name = "tasks/task_update.html"
|
||||
|
||||
slug = None
|
||||
task_list = None
|
||||
|
||||
def form_valid(self, form):
|
||||
add_log_action(self.request, form, "tasks", "task", False)
|
||||
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):
|
||||
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):
|
||||
class TaskDetailView(LoginRequiredMixin, DetailView):
|
||||
model = Task
|
||||
success_url = reverse_lazy("tasks:index")
|
||||
template_name = "tasks/task_detail.html"
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
@@ -144,30 +120,16 @@ class TaskDetail(LoginRequiredMixin, DetailView):
|
||||
context = super().get_context_data(**kwargs)
|
||||
|
||||
docus = Document.objects.filter(task__id=self.object.id).order_by("-date")
|
||||
documents = deque([])
|
||||
# list of etherpad url-link of any documents
|
||||
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()
|
||||
|
||||
context["documents"] = docus
|
||||
context["topic"] = Topic.objects.get(task_list=self.object.task_list)
|
||||
return context
|
||||
|
||||
|
||||
class DocumentCreate(LoginRequiredMixin, CreateView):
|
||||
class DocumentCreateView(LoginRequiredMixin, CreateView):
|
||||
model = Document
|
||||
template_name = "tasks/attachment_create.html"
|
||||
form_class = DocumentCreateForm
|
||||
|
||||
slug = None
|
||||
|
||||
def form_valid(self, form):
|
||||
form.instance.created_by = self.request.user
|
||||
add_log_action(self.request, form, "tasks", "document", True)
|
||||
@@ -175,15 +137,9 @@ class DocumentCreate(LoginRequiredMixin, CreateView):
|
||||
|
||||
def get_context_data(self, **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
|
||||
|
||||
def get_initial(self):
|
||||
self.slug = self.kwargs.get("slug")
|
||||
|
||||
def get_success_url(self):
|
||||
kwargs = {
|
||||
"slug": self.slug,
|
||||
}
|
||||
return reverse("tasks:task-detail", kwargs=kwargs)
|
||||
return reverse("tasks:task-detail", kwargs=self.kwargs)
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
</a>
|
||||
|
||||
{% 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>
|
||||
<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>
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
{{ form.note }}
|
||||
</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">
|
||||
<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