From 7c6e01a436713d57e60ca751db799d61613099e5 Mon Sep 17 00:00:00 2001 From: moanos Date: Sat, 6 Sep 2025 13:12:06 +0200 Subject: [PATCH] feat: Add various verbose names and helptexts --- ...nimal_name_alter_animal_photos_and_more.py | 140 ++++++++++++++++++ src/fellchensammlung/models.py | 55 ++++--- 2 files changed, 171 insertions(+), 24 deletions(-) create mode 100644 src/fellchensammlung/migrations/0064_alter_animal_name_alter_animal_photos_and_more.py diff --git a/src/fellchensammlung/migrations/0064_alter_animal_name_alter_animal_photos_and_more.py b/src/fellchensammlung/migrations/0064_alter_animal_name_alter_animal_photos_and_more.py new file mode 100644 index 0000000..641d16c --- /dev/null +++ b/src/fellchensammlung/migrations/0064_alter_animal_name_alter_animal_photos_and_more.py @@ -0,0 +1,140 @@ +# Generated by Django 5.2.1 on 2025-09-06 11:11 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('fellchensammlung', '0063_adoptionnotice_adoption_process'), + ] + + operations = [ + migrations.AlterField( + model_name='animal', + name='name', + field=models.CharField(max_length=200, verbose_name='Name'), + ), + migrations.AlterField( + model_name='animal', + name='photos', + field=models.ManyToManyField(blank=True, to='fellchensammlung.image', verbose_name='Fotos'), + ), + migrations.AlterField( + model_name='animal', + name='sex', + field=models.CharField(choices=[('F', 'Weiblich'), ('M', 'Männlich'), ('M_N', 'Männlich, kastriert'), ('F_N', 'Weiblich, kastriert'), ('I', 'Intergeschlechtlich')], max_length=20, verbose_name='Geschlecht'), + ), + migrations.AlterField( + model_name='comment', + name='adoption_notice', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fellchensammlung.adoptionnotice', verbose_name='Vermittlung'), + ), + migrations.AlterField( + model_name='image', + name='alt_text', + field=models.TextField(help_text='Beschreibe das Bild für blinde und sehbehinderte Menschen', max_length=2000, verbose_name='Alternativtext'), + ), + migrations.AlterField( + model_name='location', + name='city', + field=models.CharField(blank=True, max_length=200, null=True, verbose_name='Stadt'), + ), + migrations.AlterField( + model_name='location', + name='county', + field=models.CharField(blank=True, max_length=200, null=True, verbose_name='Landkreis'), + ), + migrations.AlterField( + model_name='location', + name='housenumber', + field=models.CharField(blank=True, max_length=20, null=True, verbose_name='Hausnummer'), + ), + migrations.AlterField( + model_name='location', + name='latitude', + field=models.FloatField(verbose_name='Breitengrad'), + ), + migrations.AlterField( + model_name='location', + name='longitude', + field=models.FloatField(verbose_name='Längengrad'), + ), + migrations.AlterField( + model_name='location', + name='postcode', + field=models.CharField(blank=True, max_length=20, null=True, verbose_name='Postleitzahl'), + ), + migrations.AlterField( + model_name='location', + name='street', + field=models.CharField(blank=True, max_length=200, null=True, verbose_name='Straße'), + ), + migrations.AlterField( + model_name='notification', + name='user_to_notify', + field=models.ForeignKey(help_text='Useraccount der benachrichtigt wird', on_delete=django.db.models.deletion.CASCADE, related_name='user', to=settings.AUTH_USER_MODEL, verbose_name='Empfänger*in'), + ), + migrations.AlterField( + model_name='report', + name='created_at', + field=models.DateTimeField(auto_now_add=True, verbose_name='Erstellt am'), + ), + migrations.AlterField( + model_name='report', + name='updated_at', + field=models.DateTimeField(auto_now=True, verbose_name='Zuletzt geändert am'), + ), + migrations.AlterField( + model_name='rule', + name='created_at', + field=models.DateTimeField(auto_now_add=True, verbose_name='Erstellt am'), + ), + migrations.AlterField( + model_name='rule', + name='language', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='fellchensammlung.language', verbose_name='Sprache'), + ), + migrations.AlterField( + model_name='rule', + name='rule_identifier', + field=models.CharField(help_text='Ein eindeutiger Identifikator der Regel. Ein Regelobjekt derselben Regel in einer anderen Sprache muss den gleichen Identifikator haben', max_length=24, verbose_name='Regel-ID'), + ), + migrations.AlterField( + model_name='rule', + name='rule_text', + field=models.TextField(verbose_name='Regeltext'), + ), + migrations.AlterField( + model_name='rule', + name='updated_at', + field=models.DateTimeField(auto_now=True, verbose_name='Zuletzt geändert am'), + ), + migrations.AlterField( + model_name='searchsubscription', + name='created_at', + field=models.DateTimeField(auto_now_add=True, verbose_name='Erstellt am'), + ), + migrations.AlterField( + model_name='searchsubscription', + name='sex', + field=models.CharField(choices=[('F', 'Weiblich'), ('M', 'Männlich'), ('M_N', 'Männlich, kastriert'), ('F_N', 'Weiblich Kastriert'), ('I', 'Intergeschlechtlich'), ('A', 'Alle')], max_length=20, verbose_name='Geschlecht'), + ), + migrations.AlterField( + model_name='searchsubscription', + name='updated_at', + field=models.DateTimeField(auto_now=True, verbose_name='Zuletzt geändert am'), + ), + migrations.AlterField( + model_name='subscriptions', + name='adoption_notice', + field=models.ForeignKey(help_text='Vermittlung die abonniert wurde', on_delete=django.db.models.deletion.CASCADE, to='fellchensammlung.adoptionnotice', verbose_name='Vermittlung'), + ), + migrations.AlterField( + model_name='text', + name='title', + field=models.CharField(max_length=100, verbose_name='Titel'), + ), + ] diff --git a/src/fellchensammlung/models.py b/src/fellchensammlung/models.py index c12a932..c265157 100644 --- a/src/fellchensammlung/models.py +++ b/src/fellchensammlung/models.py @@ -38,14 +38,14 @@ class Language(models.Model): class Location(models.Model): place_id = models.CharField(max_length=200) # OSM id - latitude = models.FloatField() - longitude = models.FloatField() + latitude = models.FloatField(verbose_name=_("Breitengrad")) + longitude = models.FloatField(verbose_name=_("Längengrad")) name = models.CharField(max_length=2000) - city = models.CharField(max_length=200, blank=True, null=True) - housenumber = models.CharField(max_length=20, blank=True, null=True) - postcode = models.CharField(max_length=20, blank=True, null=True) - street = models.CharField(max_length=200, blank=True, null=True) - county = models.CharField(max_length=200, blank=True, null=True) + city = models.CharField(max_length=200, blank=True, null=True, verbose_name=_('Stadt')) + housenumber = models.CharField(max_length=20, blank=True, null=True, verbose_name=_("Hausnummer")) + postcode = models.CharField(max_length=20, blank=True, null=True, verbose_name=_("Postleitzahl")) + street = models.CharField(max_length=200, blank=True, null=True, verbose_name=_("Straße")) + county = models.CharField(max_length=200, blank=True, null=True, verbose_name=_("Landkreis")) # Country code as per ISO 3166-1 alpha-2 # https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes countrycode = models.CharField(max_length=2, verbose_name=_("Ländercode"), @@ -343,7 +343,8 @@ class User(AbstractUser): class Image(models.Model): image = models.ImageField(upload_to='images') - alt_text = models.TextField(max_length=2000, verbose_name=_('Alternativtext')) + alt_text = models.TextField(max_length=2000, verbose_name=_('Alternativtext'), + help_text=_("Beschreibe das Bild für blinde und sehbehinderte Menschen")) owner = models.ForeignKey(User, on_delete=models.CASCADE) updated_at = models.DateTimeField(auto_now=True) created_at = models.DateTimeField(auto_now_add=True) @@ -575,13 +576,14 @@ class Animal(models.Model): verbose_name_plural = _('Tiere') date_of_birth = models.DateField(verbose_name=_('Geburtsdatum')) - name = models.CharField(max_length=200) + name = models.CharField(max_length=200, verbose_name=_('Name')) description = models.TextField(null=True, blank=True, verbose_name=_('Beschreibung')) species = models.ForeignKey(Species, on_delete=models.PROTECT, verbose_name=_("Tierart")) - photos = models.ManyToManyField(Image, blank=True) + photos = models.ManyToManyField(Image, blank=True, verbose_name=_("Fotos")) sex = models.CharField( max_length=20, choices=SexChoices.choices, + verbose_name=_("Geschlecht") ) adoption_notice = models.ForeignKey(AdoptionNotice, on_delete=models.CASCADE) owner = models.ForeignKey(User, on_delete=models.CASCADE) @@ -646,10 +648,10 @@ class SearchSubscription(models.Model): owner = models.ForeignKey(User, on_delete=models.CASCADE) location = models.ForeignKey(Location, on_delete=models.PROTECT, null=True) - sex = models.CharField(max_length=20, choices=SexChoicesWithAll.choices) + sex = models.CharField(max_length=20, choices=SexChoicesWithAll.choices, verbose_name=_("Geschlecht")) max_distance = models.IntegerField(choices=DistanceChoices.choices, null=True) - updated_at = models.DateTimeField(auto_now=True) - created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True, verbose_name=_("Zuletzt geändert am")) + created_at = models.DateTimeField(auto_now_add=True, verbose_name=_("Erstellt am")) def __str__(self): if self.location and self.max_distance: @@ -670,12 +672,16 @@ class Rule(models.Model): title = models.CharField(max_length=200) # Markdown is allowed in rule text - rule_text = models.TextField() - language = models.ForeignKey(Language, on_delete=models.PROTECT) + rule_text = models.TextField(verbose_name=_("Regeltext")) + language = models.ForeignKey(Language, on_delete=models.PROTECT, verbose_name=_("Sprache")) # Rule identifier allows to translate rules with the same identifier - rule_identifier = models.CharField(max_length=24) - updated_at = models.DateTimeField(auto_now=True) - created_at = models.DateTimeField(auto_now_add=True) + rule_identifier = models.CharField(max_length=24, + verbose_name=_("Regel-ID"), + help_text=_("Ein eindeutiger Identifikator der Regel. Ein Regelobjekt " + "derselben Regel in einer anderen Sprache muss den gleichen " + "Identifikator haben")) + updated_at = models.DateTimeField(auto_now=True, verbose_name=_("Zuletzt geändert am")) + created_at = models.DateTimeField(auto_now_add=True, verbose_name=_("Erstellt am")) def __str__(self): return self.title @@ -699,8 +705,8 @@ class Report(models.Model): status = models.CharField(max_length=30, choices=STATES) reported_broken_rules = models.ManyToManyField(Rule, verbose_name=_("Regeln gegen die verstoßen wurde")) user_comment = models.TextField(blank=True, verbose_name=_("Kommentar/Zusätzliche Information")) - created_at = models.DateTimeField(auto_now_add=True) - updated_at = models.DateTimeField(auto_now=True) + updated_at = models.DateTimeField(auto_now=True, verbose_name=_("Zuletzt geändert am")) + created_at = models.DateTimeField(auto_now_add=True, verbose_name=_("Erstellt am")) def __str__(self): return f"[{self.status}]: {self.user_comment:.20}" @@ -804,7 +810,7 @@ class Text(models.Model): """ Base class to store markdown content """ - title = models.CharField(max_length=100) + title = models.CharField(max_length=100, verbose_name=_("Titel")) content = models.TextField(verbose_name="Inhalt") language = models.ForeignKey(Language, verbose_name="Sprache", on_delete=models.PROTECT) text_code = models.CharField(max_length=24, verbose_name="Text code", blank=True) @@ -894,7 +900,7 @@ class Comment(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=_('Nutzer*in')) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) - adoption_notice = models.ForeignKey(AdoptionNotice, on_delete=models.CASCADE, verbose_name=_('AdoptionNotice')) + adoption_notice = models.ForeignKey(AdoptionNotice, on_delete=models.CASCADE, verbose_name=_('Vermittlung')) text = models.TextField(verbose_name="Inhalt") reply_to = models.ForeignKey("self", verbose_name="Antwort auf", blank=True, null=True, on_delete=models.CASCADE) @@ -922,7 +928,7 @@ class Notification(models.Model): user_to_notify = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=_('Empfänger*in'), - help_text=_("Useraccount der Benachrichtigt wird"), + help_text=_("Useraccount der benachrichtigt wird"), related_name='user') title = models.CharField(max_length=100, verbose_name=_("Titel")) text = models.TextField(verbose_name="Inhalt") @@ -964,7 +970,8 @@ class Subscriptions(models.Model): verbose_name_plural = _("Abonnements") owner = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=_('Nutzer*in')) - adoption_notice = models.ForeignKey(AdoptionNotice, on_delete=models.CASCADE, verbose_name=_('AdoptionNotice')) + adoption_notice = models.ForeignKey(AdoptionNotice, on_delete=models.CASCADE, verbose_name=_('Vermittlung'), + help_text=_("Vermittlung die abonniert wurde")) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True)