From 1ea30f38afc624d62fc927dd38e4bffb60ff9da5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ml=C3=A1dek?= Date: Tue, 9 Jun 2020 12:27:58 +0200 Subject: [PATCH] add "related documents" --- sdbs_pile/pile/admin.py | 14 +++++++++++++ .../pile/migrations/0011_document_related.py | 18 +++++++++++++++++ sdbs_pile/pile/models.py | 1 + sdbs_pile/pile/static/main.css | 4 ++-- .../pile/templates/front_doc_detail.html | 20 +++++++++++++++++++ sdbs_pile/pile/templates/front_intro.html | 6 +++--- 6 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 sdbs_pile/pile/migrations/0011_document_related.py diff --git a/sdbs_pile/pile/admin.py b/sdbs_pile/pile/admin.py index da5cfea..0646951 100644 --- a/sdbs_pile/pile/admin.py +++ b/sdbs_pile/pile/admin.py @@ -1,3 +1,4 @@ +from django import forms from django.contrib import admin from sdbs_pile.pile.models import Tag, Document @@ -31,12 +32,25 @@ class DocumentExternalListFilter(admin.SimpleListFilter): return queryset +class DocumentAdminForm(forms.ModelForm): + related = forms.ModelMultipleChoiceField(queryset=Document.objects.none()) + + class Meta: + model = Document + fields = '__all__' + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['related'].queryset = Document.objects.exclude(pk=self.instance.pk) + + class DocumentAdmin(admin.ModelAdmin): exclude = ('is_removed',) list_display = ('title', 'author', 'published', 'media_type', 'status', 'has_file', 'public', 'filed_under') list_filter = ('tags', 'media_type', 'status', DocumentExternalListFilter, 'public') search_fields = ('title', 'author', 'published') actions = ('make_published', 'make_hidden') + form = DocumentAdminForm def has_file(self, document: Document): return document.file is not None and str(document.file).strip() != '' diff --git a/sdbs_pile/pile/migrations/0011_document_related.py b/sdbs_pile/pile/migrations/0011_document_related.py new file mode 100644 index 0000000..b85de14 --- /dev/null +++ b/sdbs_pile/pile/migrations/0011_document_related.py @@ -0,0 +1,18 @@ +# Generated by Django 3.0.4 on 2020-06-09 08:32 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pile', '0010_document_media_type'), + ] + + operations = [ + migrations.AddField( + model_name='document', + name='related', + field=models.ManyToManyField(related_name='_document_related_+', to='pile.Document'), + ), + ] diff --git a/sdbs_pile/pile/models.py b/sdbs_pile/pile/models.py index 7edbd4e..af4975a 100644 --- a/sdbs_pile/pile/models.py +++ b/sdbs_pile/pile/models.py @@ -57,6 +57,7 @@ class Document(SoftDeletableModel): max_length=3, choices=DocumentStatus.choices, default=DocumentStatus.STANDARD) tags = models.ManyToManyField(Tag, related_name="documents", blank=True) uploaded = models.DateTimeField(auto_now_add=True, null=True) + related = models.ManyToManyField('self', related_name='related') objects = DocumentManager() diff --git a/sdbs_pile/pile/static/main.css b/sdbs_pile/pile/static/main.css index 783ab00..9e1bf26 100755 --- a/sdbs_pile/pile/static/main.css +++ b/sdbs_pile/pile/static/main.css @@ -220,7 +220,7 @@ ul > li:before { margin-bottom: .5em; } -.index-listing-desc { +.short-doc-desc { font-size: 12pt; color: #bfbfbf; padding-left: calc(20px + .5rem); @@ -231,7 +231,7 @@ ul > li:before { text-overflow: ellipsis; } -.index-listing-desc p { +.short-doc-desc p { margin-top: 0; } diff --git a/sdbs_pile/pile/templates/front_doc_detail.html b/sdbs_pile/pile/templates/front_doc_detail.html index 82e98b7..be61784 100644 --- a/sdbs_pile/pile/templates/front_doc_detail.html +++ b/sdbs_pile/pile/templates/front_doc_detail.html @@ -64,6 +64,26 @@ {% url "pile:label" document.id %} {% endif %} + {% if document.related.exists %} +
+

Related documents

+ + {% endif %} {% endblock %} diff --git a/sdbs_pile/pile/templates/front_intro.html b/sdbs_pile/pile/templates/front_intro.html index 31c2e06..550d941 100644 --- a/sdbs_pile/pile/templates/front_intro.html +++ b/sdbs_pile/pile/templates/front_intro.html @@ -17,12 +17,12 @@ #{{ random_document.id }}: {{ random_document.title }} -
+
{% if random_document.tags.count > 0 %}
Filed under: {{ random_document.tags.all | join:" / " }}
{% endif %}
-
+
{{ random_document.plain_description }}
@@ -41,7 +41,7 @@ {% endif %} {{ document.title }} -
+
{{ document.plain_description }}