set title from file; set shortterm to slug

This commit is contained in:
2022-04-14 13:53:24 +00:00
parent a9a0729a73
commit 119bdf71b3
3 changed files with 49 additions and 33 deletions

View File

@@ -1,6 +1,7 @@
import logging
from datetime import date
from pathlib import Path
from django.core.validators import ValidationError
from django.db import models
from django.db.models.constraints import UniqueConstraint
@@ -42,8 +43,7 @@ class TopicGroup(models.Model):
return reverse("intern:index") + "#" + self.slug
def clean(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.shortterm)
self.slug = slugify(self.shortterm)
class Topic(models.Model):
@@ -76,8 +76,7 @@ class Topic(models.Model):
return reverse("intern:topic", kwargs={"slug": self.slug})
def clean(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.shortterm)
self.slug = slugify(self.shortterm)
class Attachment(models.Model):
@@ -115,8 +114,7 @@ class Attachment(models.Model):
return reverse("intern:attachment", kwargs=kwargs)
def clean(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.shortterm)
self.slug = slugify(self.shortterm)
class Etherpad(models.Model):
@@ -158,24 +156,23 @@ class Etherpad(models.Model):
)
def clean(self):
if not self.slug:
self.slug = slugify(self.title)
self.slug = slugify(self.title)
pad_name = self.__get_pad_name()
if len(pad_name) > 50:
raise ValidationError(
_(
"Name zum Erstellen des Etherpads ist zu lange - max. 50 Zeichen. (Länge: %(length)s, Name: %(pad_name)s)"
),
params={"length": len(pad_name), "pad_name": pad_name},
)
self.etherpad_key = create_pad(pad_name)
if not self.etherpad_key:
raise ValidationError(
_(f"Etherpad '{pad_name}' konnte nicht erstellt werden."),
)
pad_name = self.__get_pad_name()
if len(pad_name) > 50:
raise ValidationError(
_(
"Name zum Erstellen des Etherpads ist zu lange - max. 50 Zeichen. (Länge: %(length)s, Name: %(pad_name)s)"
),
params={"length": len(pad_name), "pad_name": pad_name},
)
self.etherpad_key = create_pad(pad_name)
if not self.etherpad_key:
raise ValidationError(
_(f"Etherpad '{pad_name}' konnte nicht erstellt werden."),
)
@property
def etherpad_html(self):
@@ -186,7 +183,7 @@ class Etherpad(models.Model):
class FileUpload(models.Model):
title = models.CharField(verbose_name="Titel", max_length=128)
title = models.CharField(verbose_name="Titel", max_length=128, blank=True)
file_field = models.FileField(
verbose_name="Dokument", upload_to="uploads/intern/files/"
)
@@ -202,3 +199,7 @@ class FileUpload(models.Model):
def __str__(self):
return self.title
def clean(self):
if not self.title:
self.title = Path(self.file_field.name).stem

View File

@@ -178,7 +178,12 @@ class TopicUpdateView(LoginRequiredMixin, UpdateView):
slug = None
def form_valid(self, form):
form.instance.created_by = self.request.user
add_log_action(self.request, form, "intern", "topic", False)
# get new slug
obj = form.save(commit=False)
self.slug = obj.slug
return super().form_valid(form)
def get_context_data(self, **kwargs):
@@ -238,14 +243,18 @@ class AttachmentUpdateView(LoginRequiredMixin, UpdateView):
slug = None
def form_valid(self, form):
add_log_action(self.request, form, "tasks", "attachment", False)
form.instance.created_by = self.request.user
add_log_action(self.request, form, "intern", "attachment", False)
# get new slug
obj = form.save(commit=False)
self.slug = obj.slug
return super().form_valid(form)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["topic_slug"] = self.topic_slug
context["slug"] = self.slug
context["topic"] = Topic.objects.get(slug=self.topic_slug)
attachment = Attachment.objects.get(
Q(slug=self.slug) & Q(topic__slug=self.topic_slug)
)

View File

@@ -18,6 +18,16 @@
</div>
{% endif %}
<label>
<span class="text-gray-700 dark:text-gray-200">{{ form.file_field.label }}</span>
{% if form.file_field.errors %}
<div class="alert alert-danger">
<div class="alert-body">{{ form.file_field.errors }}</div>
</div>
{% endif %}
<input type="file" id="id_file_field" name="file_field" class="text-gray-700 dark:text-gray-200 block w-full mt-1 rounded-md border-gray-300 dark:border-none shadow-sm focus:border-none focus:ring focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50" required>
</label>
<label class="block">
<span class="text-gray-700 dark:text-gray-200">{{ form.title.label }}</span>
{% if form.title.errors %}
@@ -25,13 +35,9 @@
<div class="alert-body">{{ form.title.errors }}</div>
</div>
{% endif %}
<input type="text" id="id_title" name="title" class="mt-1 block w-full rounded-md border-gray-300 dark:border-none shadow-sm focus:border-none focus:ring focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50" required>
<input type="text" id="id_title" name="title" class="mt-1 block w-full rounded-md border-gray-300 dark:border-none shadow-sm focus:border-none focus:ring focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50">
</label>
<label>
<span class="text-gray-700 dark:text-gray-200">{{ form.file_field.label }}</span>
<input type="file" id="id_file_field" name="file_field" class="text-gray-700 dark:text-gray-200 block w-full mt-1 rounded-md border-gray-300 dark:border-none shadow-sm focus:border-none focus:ring focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50" required>
</label>
<input type="hidden" name="attachment" value="{{ attachment.id }}" id="id_attachment">