diff --git a/dashboard.py b/dashboard.py index 10fd906c..24211575 100644 --- a/dashboard.py +++ b/dashboard.py @@ -85,6 +85,7 @@ def init_with_context(self, context): "mod_app.models.support_models.Source", "mod_app.models.support_models.OtherLink", "mod_app.models.support_models.Tag", + "mod_app.models.feedback_model.Feedback", ), ), ], diff --git a/mod_app/admin/__init__.py b/mod_app/admin/__init__.py index b0b2adf6..bbe3a464 100644 --- a/mod_app/admin/__init__.py +++ b/mod_app/admin/__init__.py @@ -30,7 +30,7 @@ PostcardAdmin, TagAdmin, ) -from .note_admin import ProjectNoteAdmin +from .note_admin import ProjectNoteAdmin, FeedbackAdmin __all__ = [ "BibliographyItemAdmin", @@ -66,4 +66,5 @@ "TagAdmin", "CustomUserAdmin", "ProjectNoteAdmin", + "FeedbackAdmin", ] diff --git a/mod_app/admin/note_admin.py b/mod_app/admin/note_admin.py index e0734939..4c3df069 100644 --- a/mod_app/admin/note_admin.py +++ b/mod_app/admin/note_admin.py @@ -3,7 +3,7 @@ from django.utils.html import format_html -from mod_app.models import ProjectNote +from mod_app.models import ProjectNote, Feedback @admin.register(ProjectNote) @@ -11,7 +11,25 @@ class ProjectNoteAdmin(admin.ModelAdmin): class Media: js = ("admin/js/mentionsPluginConfig.js",) - search_fields = ["description", "url"] + search_fields = ["title"] + list_display = ["title", "safe_content"] + readonly_fields = ("bibliography",) + + def safe_content(self, obj): + truncated_content = truncatechars_html(obj.content, 200) + modified_content = truncated_content.replace("{", "(").replace("}", ")") + return format_html(modified_content) + + safe_content.allow_tags = True + safe_content.short_description = "Content" + + +@admin.register(Feedback) +class FeedbackAdmin(admin.ModelAdmin): + class Media: + js = ("admin/js/mentionsPluginConfig.js",) + + search_fields = ["title"] list_display = ["title", "safe_content"] readonly_fields = ("bibliography",) diff --git a/mod_app/migrations/0023_add_feedback_model.py b/mod_app/migrations/0023_add_feedback_model.py new file mode 100644 index 00000000..1ef3be63 --- /dev/null +++ b/mod_app/migrations/0023_add_feedback_model.py @@ -0,0 +1,46 @@ +# Generated by Django 4.2.5 on 2024-06-27 13:55 + +import ckeditor_uploader.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("mod_app", "0022_bibliographyitem_annotation"), + ] + + operations = [ + migrations.CreateModel( + name="Feedback", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("title", models.CharField(max_length=255)), + ( + "content", + ckeditor_uploader.fields.RichTextUploadingField( + blank=True, help_text="Mentions are available here.", null=True + ), + ), + ( + "bibliography", + models.ManyToManyField( + blank=True, + help_text="This field updates on save, and some items may not be visible immediately", + related_name="feedback", + to="mod_app.bibliographyitem", + ), + ), + ], + options={ + "verbose_name": "Feedback", + }, + ), + ] diff --git a/mod_app/models/__init__.py b/mod_app/models/__init__.py index 485cc488..c9ed884d 100644 --- a/mod_app/models/__init__.py +++ b/mod_app/models/__init__.py @@ -1,6 +1,7 @@ from .film_model import Film from .bibliography_model import BibliographyItem from .project_note_model import ProjectNote +from .feedback_model import Feedback from .support_models import ( BaseLinkModel, FileLink, @@ -44,4 +45,5 @@ "OtherLink", "Video", "ProjectNote", + "Feedback", ] diff --git a/mod_app/models/feedback_model.py b/mod_app/models/feedback_model.py new file mode 100644 index 00000000..a63c7369 --- /dev/null +++ b/mod_app/models/feedback_model.py @@ -0,0 +1,33 @@ +from ckeditor_uploader.fields import RichTextUploadingField +from django.db import models + +from .bibliography_model import BibliographyItem +from ..utils.extract_citations import update_bibliography + + +class Feedback(models.Model): + class Meta: + verbose_name = "Feedback" + + def __str__(self): + return self.title + + title = models.CharField(max_length=255, null=False) + + content = RichTextUploadingField( + null=True, + blank=True, + help_text="Mentions are available here.", + ) + + bibliography = models.ManyToManyField( + BibliographyItem, + blank=True, + related_name="feedback", + help_text="This field updates on save, and some items may not be visible immediately", + ) + + def save(self, *args, **kwargs): + super().save(*args, **kwargs) + + update_bibliography(self, self.content) diff --git a/mod_app/models/project_note_model.py b/mod_app/models/project_note_model.py index d5eaa152..12369714 100644 --- a/mod_app/models/project_note_model.py +++ b/mod_app/models/project_note_model.py @@ -23,7 +23,7 @@ def __str__(self): bibliography = models.ManyToManyField( BibliographyItem, blank=True, - related_name="project_notes", + related_name="project_note", help_text="This field updates on save, and some items may not be visible immediately", )