diff --git a/liederquelle/quellen/models/__init__.py b/liederquelle/quellen/models/__init__.py new file mode 100644 index 0000000..a262ec7 --- /dev/null +++ b/liederquelle/quellen/models/__init__.py @@ -0,0 +1,2 @@ +from .person import * +from .contact import * diff --git a/liederquelle/quellen/models/contact.py b/liederquelle/quellen/models/contact.py new file mode 100644 index 0000000..7da931a --- /dev/null +++ b/liederquelle/quellen/models/contact.py @@ -0,0 +1,123 @@ +from django.db import models +from taggit.managers import TaggableManager +from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation +from django.contrib.contenttypes.models import ContentType +from django.contrib.auth.models import User +from .person import Person + +class AuthorURL(models.Model): + person = models.ForeignKey(Person, + blank=False, + on_delete=models.CASCADE, + ) + name = models.CharField( + verbose_name='Art', + max_length=15, + blank=False, + default='Homepage', + help_text='z.B. Wikipedia-Eintrag' + ) + url = models.URLField( + verbose_name='URL', + blank=False, + help_text='Web-Adresse', + ) + + class Meta: + verbose_name = 'Autor-Website' + verbose_name_plural = 'Autor-Webseiten' + ordering = ['person', 'name',] + + list_display = ['person', 'name', 'url'] + + +class Contact(models.Model): + content_type = models.ForeignKey(ContentType, + on_delete = models.CASCADE, + help_text = 'Person oder Verlag', + default = Person, + blank=False,null=False, + ) + object_id = models.PositiveBigIntegerField( + default=1, + blank=False,null=False, + ) + content_object = GenericForeignKey("content_type", "object_id") + 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', + blank=True, + help_text = 'Postadresse', + ) + last_try = models.DateField( + verbose_name = 'letzter Kontaktversuch', + blank=True,null=True, + ) + user = models.ForeignKey(User, + verbose_name = 'User', + blank=True,null=True, + on_delete = models.SET_NULL, + help_text = 'Kontakt durch bzw. persönlich bekannt mit Projektmitarbeiter*in' + ) + success = models.BooleanField( + verbose_name = 'Kontakt erfolgreich?', + blank=True,null=True,default=None, + help_text = 'War der Kontaktversuch erfolgreich?' + ) + remarks = models.TextField( + verbose_name='Anmerkungen', + blank=True, + #help_text='', + ) + + class Meta: + verbose_name = 'Kontakt' + verbose_name_plural = 'Kontakte' + #ordering = ['content_object', 'last_try'] + indexes = [ + models.Index(fields=["content_type", "object_id"]), + ] + + def __str__(self): + return str(self.content_object) + + list_display = ['content_object', 'name', 'last_try', 'user', 'success'] + + +class Medium(models.Model): + contact = models.ForeignKey(Contact, + blank=False, + on_delete=models.CASCADE, + ) + 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' + XMPP = "XMPP", 'XMPP-ID' + key = models.CharField( + verbose_name='Art', + max_length=15, + choices=IDs, + default=IDs.Email, + ) + value = models.CharField( + verbose_name='Wert', + max_length=127, + blank=False, + help_text='Adresse bzw. Handle', + ) + + class Meta: + verbose_name = 'Kontaktmedium' + verbose_name_plural = 'Kontaktmedien' + ordering = ['contact','key'] + + list_display = ['contact', 'key', 'value'] diff --git a/liederquelle/quellen/models.py b/liederquelle/quellen/models/person.py similarity index 54% rename from liederquelle/quellen/models.py rename to liederquelle/quellen/models/person.py index afaa400..126f65a 100644 --- a/liederquelle/quellen/models.py +++ b/liederquelle/quellen/models/person.py @@ -1,8 +1,6 @@ from django.db import models from taggit.managers import TaggableManager -from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation -from django.contrib.contenttypes.models import ContentType -from django.contrib.auth.models import User +from django.contrib.contenttypes.fields import GenericRelation class Person(models.Model): @@ -135,121 +133,3 @@ class AuthorID(models.Model): ordering = ['person', 'key', 'value'] list_display = ['person', 'key', 'value'] - - -class AuthorURL(models.Model): - person = models.ForeignKey(Person, - blank=False, - on_delete=models.CASCADE, - ) - name = models.CharField( - verbose_name='Art', - max_length=15, - blank=False, - default='Homepage', - help_text='z.B. Wikipedia-Eintrag' - ) - url = models.URLField( - verbose_name='URL', - blank=False, - help_text='Web-Adresse', - ) - - class Meta: - verbose_name = 'Autor-Website' - verbose_name_plural = 'Autor-Webseiten' - ordering = ['person', 'name',] - - list_display = ['person', 'name', 'url'] - - -class Contact(models.Model): - content_type = models.ForeignKey(ContentType, - on_delete = models.CASCADE, - help_text = 'Person oder Verlag', - default = Person, - blank=False,null=False, - ) - object_id = models.PositiveBigIntegerField( - default=1, - blank=False,null=False, - ) - content_object = GenericForeignKey("content_type", "object_id") - 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', - blank=True, - help_text = 'Postadresse', - ) - last_try = models.DateField( - verbose_name = 'letzter Kontaktversuch', - blank=True,null=True, - ) - user = models.ForeignKey(User, - verbose_name = 'User', - blank=True,null=True, - on_delete = models.SET_NULL, - help_text = 'Kontakt durch bzw. persönlich bekannt mit Projektmitarbeiter*in' - ) - success = models.BooleanField( - verbose_name = 'Kontakt erfolgreich?', - blank=True,null=True,default=None, - help_text = 'War der Kontaktversuch erfolgreich?' - ) - remarks = models.TextField( - verbose_name='Anmerkungen', - blank=True, - #help_text='', - ) - - class Meta: - verbose_name = 'Kontakt' - verbose_name_plural = 'Kontakte' - #ordering = ['content_object', 'last_try'] - indexes = [ - models.Index(fields=["content_type", "object_id"]), - ] - - def __str__(self): - return str(self.content_object) - - list_display = ['content_object', 'name', 'last_try', 'user', 'success'] - - -class Medium(models.Model): - contact = models.ForeignKey(Contact, - blank=False, - on_delete=models.CASCADE, - ) - 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' - XMPP = "XMPP", 'XMPP-ID' - key = models.CharField( - verbose_name='Art', - max_length=15, - choices=IDs, - default=IDs.Email, - ) - value = models.CharField( - verbose_name='Wert', - max_length=127, - blank=False, - help_text='Adresse bzw. Handle', - ) - - class Meta: - verbose_name = 'Kontaktmedium' - verbose_name_plural = 'Kontaktmedien' - ordering = ['contact','key'] - - list_display = ['contact', 'key', 'value']