diff --git a/liederquelle/quellen/admin.py b/liederquelle/quellen/admin.py index fbcb6e3..f5b58d5 100644 --- a/liederquelle/quellen/admin.py +++ b/liederquelle/quellen/admin.py @@ -1,28 +1,54 @@ from django.contrib import admin from .models import Person, Identity, AuthorID, Contact, Medium +from taggit_helpers.admin import TaggitListFilter, TaggitTabularInline + + +# TODO: Links zu Suchseiten mit Vorbelegungen + + +class IdentityTabularInline(admin.TabularInline): + model = Identity + #ordering_field = ['slideshow', 'weight'] + ordering_field_hide_input = False + #fields = ['weight', 'display_title', 'target', 'image', 'overlay_image'] + # exclude = ['display_content', 'overlay_tilt', 'overlay_class', 'activated'] @admin.register(Person) class PersonAdmin(admin.ModelAdmin): - list_display = ['name',] + list_display = ['name', 'full_name', 'birth_year'] + search_fields = ('name', 'full_name', 'name_native', 'birth_name') + inlines = [ + IdentityTabularInline + ] @admin.register(Identity) class IdentityAdmin(admin.ModelAdmin): - list_display = ['person','author_id','alias'] + list_display = ['person', 'author_id', 'alias', 'organization'] + search_fields = ('alias', 'organization') + list_filter = ['person', 'organization', TaggitListFilter] + exclude = ('tags',) + inlines = [ + TaggitTabularInline, + ] @admin.register(AuthorID) class AuthorIDAdmin(admin.ModelAdmin): list_display = ['person','key','value'] + search_fields = ('value',) @admin.register(Contact) class ContactAdmin(admin.ModelAdmin): date_hierarchy = 'last_try' - list_display = ['reference',] + list_display = ['reference', 'name',] + search_fields = ('name', 'address', 'remarks') + #prepopulated_fields = {'user': ('',)} @admin.register(Medium) class MediumAdmin(admin.ModelAdmin): list_display = ['contact','key','value'] + search_fields = ('value',) diff --git a/liederquelle/quellen/models.py b/liederquelle/quellen/models.py index d1ab3ed..79a56fd 100644 --- a/liederquelle/quellen/models.py +++ b/liederquelle/quellen/models.py @@ -16,6 +16,11 @@ class Person(models.Model): max_length=255, blank=True, help_text='Name mit zusätzlichen Vornamen, Titeln usw.', ) + name_native = models.CharField( + verbose_name='Name in Originalschreibweise', + max_length=255, blank=True, + help_text='Name in nichtlateinischer Schrift', + ) birth_name = models.CharField( verbose_name='Geburtsname', max_length=127, blank=True, @@ -41,6 +46,7 @@ class Person(models.Model): blank=True, #help_text='', ) + # TODO: URLs wie Tags? class Meta: verbose_name = 'Person' @@ -69,7 +75,17 @@ class Identity(models.Model): blank=True, help_text='Fahrtenname, Künstlername o.ä.; Spitznamen nur, wenn sie mehr sind als eine Vornamensvariante.', ) - tags = TaggableManager() + organization = models.CharField( + verbose_name='Organisation', + max_length=127, + blank=True, + help_text='Bund (mit Stamm/Orden), Band o.ä. wie am Lied anzuzeigen – bitte zusätzlich taggen!', + ) + tags = TaggableManager( + blank=True, + help_text='Kommaseparierte Stichwörter zu dieser Identität, z.B. "Bund:DPB,Band:Schlagsaite"', + verbose_name='Stichwörter' + ) class Meta: verbose_name = 'Identität' @@ -87,6 +103,7 @@ class AuthorID(models.Model): blank=False, on_delete=models.CASCADE, ) + # TODO: Medien in eigene Tabelle ausgliedern class IDs(models.TextChoices): DISCOGS = "DISCOGS", 'Discogs' GND = "GND", 'DNB GND' @@ -121,6 +138,13 @@ class Contact(models.Model): reference = models.ForeignKey(ContentType, on_delete = models.CASCADE, help_text = 'Person oder Verlag' + # TODO: Das stimmt so nicht, ID des Objekts fehlt + ) + name = models.CharField( + verbose_name = 'Kontaktperson', + blank=True, + max_length=127, + help_text = 'Name der Kontaktperson, falls nicht mit der Person identisch' ) address = models.TextField( verbose_name = 'Adresse', @@ -135,7 +159,7 @@ class Contact(models.Model): verbose_name = 'User', blank=True,null=True, on_delete = models.SET_NULL, - help_text = 'Kontakt durch Projektmitarbeiter*in' + help_text = 'Kontakt durch bzw. persönlich bekannt mit Projektmitarbeiter*in' ) success = models.BooleanField( verbose_name = 'Kontakt erfolgreich?', @@ -161,9 +185,11 @@ class Medium(models.Model): blank=False, on_delete=models.CASCADE, ) + # TODO: Medien in eigene Tabelle ausgliedern class IDs(models.TextChoices): Email = "Email", 'E-Mail' Phone = "Phone", 'Telefon' + Web = "Web", 'Homepage' Signal = "Signal", 'Signal-ID' Fedi = "Fedi", 'Fediverse-Handle' Matrix = "Matrix", 'Matrix-ID' @@ -182,8 +208,8 @@ class Medium(models.Model): ) class Meta: - verbose_name = 'Medium' - verbose_name_plural = 'Medien' + verbose_name = 'Kontaktmedium' + verbose_name_plural = 'Kontaktmedien' ordering = ['contact','key'] list_display = ['contact', 'key', 'value'] diff --git a/requirements.txt b/requirements.txt index 8174ffd..1a5c3a5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,3 +3,4 @@ Pillow django-dotenv django-taggit +django-taggit-helpers