add file uploads to post

This commit is contained in:
2021-03-01 14:52:17 +00:00
parent 48e0ceb169
commit 74ff9a7199
4 changed files with 64 additions and 67 deletions

View File

@@ -1,7 +1,7 @@
from django.contrib import admin, auth, messages
from django.utils.translation import gettext_lazy as _
from .models import Post, Event, News, FetMeeting
from .models import Post, Event, News, FetMeeting, FileUpload
from .forms import PostForm, EventForm, NewsForm, FetMeetingForm
from documents.api import createPadifNotExists
@@ -58,6 +58,13 @@ def make_fetmeeting(self, request, queryset):
make_fetmeeting.short_description = "In eine Fachschaftssitzung konvertieren"
class FileUploadInline(admin.TabularInline):
model = FileUpload
extra = 0
verbose_name = "Dokument"
verbose_name_plural = "Do­ku­men­ten­samm­lung"
class PostAdmin(admin.ModelAdmin):
form = PostForm
model = Post
@@ -101,6 +108,12 @@ class PostAdmin(admin.ModelAdmin):
]
class NewsAdmin(PostAdmin):
form = NewsForm
model = News
inlines = (FileUploadInline,)
class EventAdmin(PostAdmin):
form = EventForm
model = Event
@@ -110,11 +123,6 @@ class EventAdmin(PostAdmin):
actions = [make_fetmeeting]
class NewsAdmin(PostAdmin):
form = NewsForm
model = News
class FetMeetingAdmin(EventAdmin):
form = FetMeetingForm
model = FetMeeting

View File

@@ -28,17 +28,17 @@ def create_pad_for_post(slug, typ="agenda"):
"Creates a Etherpad Pad and returns EtherpadKey"
print("creatingpadforpost")
try:
agenda_key = createPadifNotExists(slug + "-" + typ)
etherpad_key = createPadifNotExists(slug + "-" + typ)
except URLError as error:
request_logger.info(
"""%s konnte von dem Slug '%s' nicht erstellt werden.
Error: %s""",
"%s konnte von dem Slug '%s' nicht erstellt werden. Error: %s",
typ,
slug,
error,
)
return None
return agenda_key
return etherpad_key
class Category(models.Model):
@@ -59,30 +59,24 @@ class Category(models.Model):
class Post(models.Model):
# id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
# legacy id is for the posts from the old website
legacy_id = models.IntegerField(null=True, blank=True)
legacy_rubrik_id = models.IntegerField(null=True, blank=True)
# Titel des Posts
title = models.CharField(verbose_name="Titel", max_length=200)
subtitle = models.CharField(max_length=500, null=True, blank=True)
tags = TaggableManager(blank=True)
# Slug = Text Basierter url bestandteil zb Fetsitzung 22.1.2020 --> fetsitzung_22_1_2020 für Url
slug = models.SlugField(unique=True, blank=True)
# Body Text Artikel Text soll später mit WYSIWG Editor bearbeitet werden
body = models.TextField(null=True, blank=True)
# Ein Haupt Bild für den Post
image = models.ImageField(null=True, blank=True)
# Wer hat das geschrieben
author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
tags = TaggableManager(blank=True)
# Datum ab dem etwas öffentlich sein soll
body = models.TextField(null=True, blank=True)
image = models.ImageField(null=True, blank=True)
author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
public_date = models.DateField(
verbose_name="Veröffentlichung", null=True, blank=True, default=timezone.now
)
imported_from = models.CharField(max_length=200, null=True, blank=True)
__choices = [("N", _("News")), ("E", _("Event")), ("F", _("FetMeeting"))]
post_type = models.CharField(max_length=1, choices=__choices, editable=True)
@@ -92,14 +86,12 @@ class Post(models.Model):
# post is hidden from newsfeed (e.g. about)
is_hidden = models.BooleanField(verbose_name="UNSICHTBAR", default=False)
# Zusatz Info wenn ein Event gepostet wird
event_start = models.DateTimeField(
verbose_name="Event Start", null=True, blank=True
)
# addional infos for events
event_start = models.DateTimeField(verbose_name="Event Start", null=True, blank=True)
event_end = models.DateTimeField(verbose_name="Event Ende", null=True, blank=True)
event_place = models.CharField(max_length=200, null=True, blank=True)
# Dokumente v.a. fuer Sitzungen
# protocol for fet meeting
has_protocol = models.BooleanField(default=False)
has_agenda = models.BooleanField(default=False)
protocol_key = models.CharField(max_length=200, null=True, blank=True)
@@ -109,6 +101,10 @@ class Post(models.Model):
date_modified = models.DateTimeField(auto_now=True)
date_created = models.DateTimeField(auto_now_add=True)
# useless (-_-)
legacy_rubrik_id = models.IntegerField(null=True, blank=True)
imported_from = models.CharField(max_length=200, null=True, blank=True)
# Managers
objects = PostManager()
articles = ArticleManager()
@@ -228,9 +224,6 @@ class Post(models.Model):
return image.url
return ""
# def key(self):
# return self.slug or self.id
def find_an_image(self):
"find an image via another post"
# TODO: Explain why this image is selected on save of the image
@@ -243,10 +236,6 @@ class Post(models.Model):
if len(posts1) > 0:
return posts1.get().image
# posts2=self.tags.similar_objects()
# for p in posts2:
# if p.image is not None:
# return p.image
return None
@property
@@ -351,34 +340,6 @@ class FetMeeting(Event):
return slug
# def __get_agenda_key(self):
# if not self.slug:
# return None##
#
# try:
# agenda_key = createPadifNotExists(self.slug + "-agenda")
# except Exception as error:
# raise ValidationError(
# _("Die Agenda konnte nicht erstellt werden. Error: %(error)s"),
# params={"error": str(error)},
# ) from error
#
# return agenda_key
# def __get_protocol_key(self):
# if not self.slug:
# return None#
#
# try:
# protocol_key = createPadifNotExists(self.slug + "-protocol")
# except URLError as error:
# raise ValidationError(
# _("Das Protokoll konnte nicht erstellt werden. Error: %(error)s"),
# params={"error": str(error)},
# ) from error#
#
# return protocol_key
def clean(self):
super().clean()
if not self.slug:
@@ -406,3 +367,14 @@ class FetMeeting(Event):
self.event_end = self.event_start + timedelta(hours=2)
super().save(*args, **kwargs)
class FileUpload(models.Model):
title = models.CharField(verbose_name="Titel", max_length=200)
file_field = models.FileField(verbose_name="Dokument", upload_to="uploads/posts/files/")
post = models.ForeignKey(Post, on_delete=models.CASCADE)
objects = models.Manager()
def __str__(self):
return self.title

View File

@@ -11,8 +11,7 @@ from documents.api import get_pad_link
from documents.etherpadlib import add_ep_cookie
from members.models import Member, JobMember
from .models import Post, FetMeeting
from .models import Post, FetMeeting, FileUpload
logger = logging.getLogger(__name__)
@@ -74,6 +73,8 @@ def show(request, id=None):
elif id != "" and id is not None:
p = Post.objects.get(slug=(id))
files = deque(FileUpload.objects.filter(post=p))
post_author = Member.all_members.filter(username=p.author).first()
author_image = None
author = None
@@ -112,6 +113,7 @@ def show(request, id=None):
context = {
"post": p,
"files": files,
"author": author,
"author_image": author_image,
"next": get_next_dict(p),

View File

@@ -79,9 +79,9 @@
</div>
<div class="cell medium-4">
<a href="{% url 'posts.show' next %}">Nächster Artikel <span class="nav fa fa-chevron-right fa-1x"></span></a><br>
<hr>
{% if request.user.is_authenticated %}
<hr>
{% if post.has_agenda %}
<a href="{{ ep_agenda_link }}">Agenda</a><br>
@@ -101,10 +101,10 @@
<a href="{% url 'admin:posts_fetmeeting_change' post.id %}">Bearbeiten</a>
{% endif %}
<hr>
{% endif %}
{% if post.event_start %}
<hr>
Start: {{ post.event_start|date:"d. F Y" }} {{ post.event_start|time:"H:i" }}<br>
{% endif %}
{% if post.event_end %}
@@ -114,6 +114,21 @@
{% if post.event_start %}
{% include 'posts/partials/_date_box.html' %}
{% endif %}
{% if files %}
<hr>
Dokumente:
<ul>
{% for file in files %}
<li><a href="{{file.file_field.url}}" target="_blank">{{file.title}}</a></li>
{% endfor %}
</ul>
{% endif %}
<hr>
</div>
</div>