From 0db5cb7fd98e3584d2b3016a90dbf6c86b9e4aa5 Mon Sep 17 00:00:00 2001 From: Roman Date: Tue, 30 Sep 2025 15:44:03 +0200 Subject: [PATCH 1/5] Add 'Antrag (URL)' request_url field to service models via RequestUrlMixin --- input/models.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/input/models.py b/input/models.py index 3c8b91c..80cd895 100755 --- a/input/models.py +++ b/input/models.py @@ -19,6 +19,19 @@ class TermsConsentMixin(models.Model): abstract = True +class RequestUrlMixin(models.Model): + """ + Abstract mixin for adding an OTRS request URL field to admin models. + + This field stores a direct link to the related OTRS ticket. + Note: OTRS links may contain semicolons, which must not be URL-encoded. + """ + request_url = models.URLField(max_length=2000, null=True, verbose_name='Antrag (URL)') + + class Meta: + abstract = True + + class Volunteer(models.Model): realname = models.CharField(max_length=200, null=True, verbose_name="Realname", help_text="Bitte gib deinen Vornamen und deinen Nachnamen ein.", default='') @@ -244,7 +257,7 @@ def getProjectEnd(sender, instance, **kwargs): # super(Travel, self).save(*args,**kwargs) #abstract base class for Library and IFG -class Grant(Extern): +class Grant(RequestUrlMixin, Extern): cost = models.CharField(max_length=10, verbose_name='Kosten', help_text="Bitte gib die ungefähr zu erwartenden Kosten in Euro an.") notes = models.TextField(max_length=1000, blank=True, verbose_name='Anmerkungen', @@ -361,7 +374,7 @@ DOMAIN_CHOICES = {'PEDIA': '@wikipedia.de', 'SOURCE': '@wikisource.de', 'VERSITY': '@wikiversity.de',} -class Domain(Extern): +class Domain(RequestUrlMixin, Extern): domain = models.CharField(max_length=10, choices=DOMAIN_CHOICES.items(), default='PEDIA') @@ -406,7 +419,7 @@ PROJECT_CHOICE = {'PEDIA': 'Wikipedia', BC_VARIANT = {'PIC': 'mit Bild', 'NOPIC': 'ohne Bild'} -class BusinessCard(TermsConsentMixin, Extern): +class BusinessCard(RequestUrlMixin, TermsConsentMixin, Extern): project = models.CharField(max_length=20, choices=PROJECT_CHOICE.items(), default='PEDIA', verbose_name='Wikimedia-Projekt', help_text='Für welches Wikimedia-Projekt möchtest Du Visitenkarten?') From b23cf3adb85035a2de05f9cd1a50f1d6094eebae Mon Sep 17 00:00:00 2001 From: Roman Date: Tue, 30 Sep 2025 15:46:23 +0200 Subject: [PATCH 2/5] Add request_url field and otrs_link.js integration to service admins with ordered fields --- input/admin.py | 134 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 131 insertions(+), 3 deletions(-) diff --git a/input/admin.py b/input/admin.py index 6c8b0a8..40500b6 100755 --- a/input/admin.py +++ b/input/admin.py @@ -52,7 +52,6 @@ class ProjectAdmin(admin.ModelAdmin): js = ('dropdown/js/otrs_link.js',) - @admin.register(BusinessCard) class BusinessCardAdmin(admin.ModelAdmin): save_as = True @@ -62,8 +61,31 @@ class BusinessCardAdmin(admin.ModelAdmin): # action = ['export_as_csv'] date_hierarchy = 'granted_date' readonly_fields = ['service_id'] + + fields = [ + 'terms_accepted', + 'realname', + 'email', + 'granted', + 'granted_date', + 'survey_mail_date', + 'mail_state', + 'survey_mail_send', + 'username', + 'project', + 'data', + 'variant', + 'url_of_pic', + 'sent_to', + 'send_data_to_print', + 'request_url', + 'intern_notes', + 'service_id', + ] + class Media: - js = ('dropdown/js/base.js',) + js = ('dropdown/js/base.js', 'dropdown/js/otrs_link.js') + @admin.register(Literature) class LiteratureAdmin(admin.ModelAdmin): @@ -74,6 +96,31 @@ class LiteratureAdmin(admin.ModelAdmin): date_hierarchy = 'granted_date' readonly_fields = ['service_id'] + fields = [ + 'terms_accepted', + 'realname', + 'email', + 'granted', + 'granted_date', + 'survey_mail_date', + 'mail_state', + 'survey_mail_send', + 'username', + 'cost', + 'notes', + 'info', + 'source', + 'selfbuy', + 'selfbuy_give_data', + 'selfbuy_data', + 'request_url', + 'intern_notes', + 'service_id', + ] + + class Media: + js = ('dropdown/js/otrs_link.js',) + @admin.register(Account) class AccountAdmin(admin.ModelAdmin): @@ -101,6 +148,27 @@ class LibraryAdmin(admin.ModelAdmin): readonly_fields = ['service_id'] exclude = ['type'] + fields = [ + 'realname', + 'email', + 'granted', + 'granted_date', + 'survey_mail_date', + 'mail_state', + 'survey_mail_send', + 'username', + 'cost', + 'notes', + 'library', + 'duration', + 'request_url', + 'intern_notes', + 'service_id', + ] + + class Media: + js = ('dropdown/js/otrs_link.js',) + def get_queryset(self, request): return super().get_queryset(request).filter(type=self.model.TYPE) @@ -124,6 +192,26 @@ class IFGAdmin(admin.ModelAdmin): date_hierarchy = 'granted_date' readonly_fields = ['service_id'] + fields = [ + 'realname', + 'email', + 'granted', + 'granted_date', + 'survey_mail_date', + 'mail_state', + 'survey_mail_send', + 'username', + 'cost', + 'notes', + 'url', + 'request_url', + 'intern_notes', + 'service_id', + ] + + class Media: + js = ('dropdown/js/otrs_link.js',) + @admin.register(Travel) class TravelAdmin(admin.ModelAdmin): save_as = True @@ -147,8 +235,28 @@ class EmailAdmin(admin.ModelAdmin): date_hierarchy = 'granted_date' radio_fields = {'adult': admin.VERTICAL} readonly_fields = ['service_id'] + + fields = [ + 'terms_accepted', + 'realname', + 'email', + 'granted', + 'granted_date', + 'survey_mail_date', + 'mail_state', + 'survey_mail_send', + 'username', + 'domain', + 'address', + 'other', + 'adult', + 'request_url', + 'intern_notes', + 'service_id', + ] + class Media: - js = ('dropdown/js/base.js',) + js = ('dropdown/js/base.js', 'dropdown/js/otrs_link.js') @admin.register(List) @@ -160,6 +268,26 @@ class ListAdmin(admin.ModelAdmin): date_hierarchy = 'granted_date' readonly_fields = ['service_id'] + fields = [ + 'terms_accepted', + 'realname', + 'email', + 'granted', + 'granted_date', + 'survey_mail_date', + 'mail_state', + 'survey_mail_send', + 'username', + 'domain', + 'address', + 'request_url', + 'intern_notes', + 'service_id', + ] + + class Media: + js = ('dropdown/js/otrs_link.js',) + # commented out because of the individual registering to control displays in admin panel #admin.site.register([ From f6465611366afdcd33dd7bb50e921f62d99dcff5 Mon Sep 17 00:00:00 2001 From: Roman Date: Tue, 30 Sep 2025 15:48:04 +0200 Subject: [PATCH 3/5] Add migrations for request_url field in service models --- ..._request_url_email_request_url_and_more.py | 43 +++++++++++++++++++ ...alter_businesscard_request_url_and_more.py | 43 +++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 input/migrations/0100_businesscard_request_url_email_request_url_and_more.py create mode 100644 input/migrations/0101_alter_businesscard_request_url_and_more.py diff --git a/input/migrations/0100_businesscard_request_url_email_request_url_and_more.py b/input/migrations/0100_businesscard_request_url_email_request_url_and_more.py new file mode 100644 index 0000000..13a5057 --- /dev/null +++ b/input/migrations/0100_businesscard_request_url_email_request_url_and_more.py @@ -0,0 +1,43 @@ +# Generated by Django 5.2.5 on 2025-09-30 11:37 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('input', '0099_businesscard_terms_accepted_email_terms_accepted_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='businesscard', + name='request_url', + field=models.URLField(blank=True, max_length=2000, null=True, verbose_name='Antrag (URL)'), + ), + migrations.AddField( + model_name='email', + name='request_url', + field=models.URLField(blank=True, max_length=2000, null=True, verbose_name='Antrag (URL)'), + ), + migrations.AddField( + model_name='ifg', + name='request_url', + field=models.URLField(blank=True, max_length=2000, null=True, verbose_name='Antrag (URL)'), + ), + migrations.AddField( + model_name='library', + name='request_url', + field=models.URLField(blank=True, max_length=2000, null=True, verbose_name='Antrag (URL)'), + ), + migrations.AddField( + model_name='list', + name='request_url', + field=models.URLField(blank=True, max_length=2000, null=True, verbose_name='Antrag (URL)'), + ), + migrations.AddField( + model_name='literature', + name='request_url', + field=models.URLField(blank=True, max_length=2000, null=True, verbose_name='Antrag (URL)'), + ), + ] diff --git a/input/migrations/0101_alter_businesscard_request_url_and_more.py b/input/migrations/0101_alter_businesscard_request_url_and_more.py new file mode 100644 index 0000000..efad959 --- /dev/null +++ b/input/migrations/0101_alter_businesscard_request_url_and_more.py @@ -0,0 +1,43 @@ +# Generated by Django 5.2.5 on 2025-09-30 12:11 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('input', '0100_businesscard_request_url_email_request_url_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='businesscard', + name='request_url', + field=models.URLField(max_length=2000, null=True, verbose_name='Antrag (URL)'), + ), + migrations.AlterField( + model_name='email', + name='request_url', + field=models.URLField(max_length=2000, null=True, verbose_name='Antrag (URL)'), + ), + migrations.AlterField( + model_name='ifg', + name='request_url', + field=models.URLField(max_length=2000, null=True, verbose_name='Antrag (URL)'), + ), + migrations.AlterField( + model_name='library', + name='request_url', + field=models.URLField(max_length=2000, null=True, verbose_name='Antrag (URL)'), + ), + migrations.AlterField( + model_name='list', + name='request_url', + field=models.URLField(max_length=2000, null=True, verbose_name='Antrag (URL)'), + ), + migrations.AlterField( + model_name='literature', + name='request_url', + field=models.URLField(max_length=2000, null=True, verbose_name='Antrag (URL)'), + ), + ] From 48e0d1d2b1b0e11c0e940d45e7f701b5677b3ca4 Mon Sep 17 00:00:00 2001 From: Roman Date: Wed, 8 Oct 2025 12:34:17 +0200 Subject: [PATCH 4/5] Add mixin to auto-insert before and remove redundant fields definitions --- input/admin.py | 188 ++++++++++++++++--------------------------------- 1 file changed, 61 insertions(+), 127 deletions(-) diff --git a/input/admin.py b/input/admin.py index 40500b6..937fac3 100755 --- a/input/admin.py +++ b/input/admin.py @@ -2,6 +2,7 @@ import csv from django.contrib import admin from django.http import HttpResponse +from django.core.exceptions import FieldDoesNotExist from .models import ( Account, @@ -19,8 +20,44 @@ from .models import ( ) -def export_as_csv(self, request, queryset): +class RequestURLBeforeInternNotesMixin: + """ + Ensures that 'request_url' (if present) appears directly before 'intern_notes'. + Works whether 'fields' is explicitly defined or derived from the Model/Form. + """ + request_url_field_name = 'request_url' + anchor_field_name = 'intern_notes' # field to insert before or after + insert_before = True # set False to insert after the anchor + def get_fields(self, request, obj=None): + # Get the current list of fields from the parent class + fields = list(super().get_fields(request, obj)) + + req = self.request_url_field_name + anchor = self.anchor_field_name + + # Skip modification if the model doesn't have 'request_url' + try: + self.model._meta.get_field(req) + except FieldDoesNotExist: + return fields + + # Ensure 'request_url' is included in the field list + if req not in fields: + fields.append(req) + + # If the anchor field exists, move 'request_url' to the desired position + if anchor in fields and req in fields: + # Remove and reinsert 'request_url' at the correct index + fields = [f for f in fields if f != req] + idx = fields.index(anchor) + insert_at = idx if self.insert_before else idx + 1 + fields.insert(insert_at, req) + + return fields + + +def export_as_csv(self, request, queryset): meta = self.model._meta field_names = [field.name for field in meta.fields] @@ -34,16 +71,24 @@ def export_as_csv(self, request, queryset): return response + export_as_csv.short_description = "Ausgewähltes zu CSV exportieren" admin.site.add_action(export_as_csv) + @admin.register(Project) class ProjectAdmin(admin.ModelAdmin): save_as = True - search_fields = ('name', 'pid','finance_id', 'realname', 'start', 'end', 'participants_estimated', 'participants_real', 'cost', 'status', 'end_quartal') - list_display = ('name', 'pid','finance_id', 'realname', 'start', 'end', 'participants_estimated', 'participants_real', 'cost', 'status', 'end_quartal') - fields = ('realname', 'email', 'granted', 'granted_date', 'mail_state', 'end_mail_send', 'survey_mail_send', 'survey_mail_date', 'name', 'description', 'pid', 'finance_id', 'start', 'end', 'otrs', 'plan', 'page', 'urls', 'group', 'location', 'participants_estimated', 'participants_real', 'insurance', 'insurance_technic', 'support', 'cost', 'account', 'granted_from', 'notes', 'intern_notes', 'status', 'project_of_year', 'end_quartal') + search_fields = ('name', 'pid', 'finance_id', 'realname', 'start', 'end', 'participants_estimated', + 'participants_real', 'cost', 'status', 'end_quartal') + list_display = ('name', 'pid', 'finance_id', 'realname', 'start', 'end', 'participants_estimated', + 'participants_real', 'cost', 'status', 'end_quartal') + fields = ('realname', 'email', 'granted', 'granted_date', 'mail_state', 'end_mail_send', 'survey_mail_send', + 'survey_mail_date', 'name', 'description', 'pid', 'finance_id', 'start', 'end', 'otrs', 'plan', 'page', + 'urls', 'group', 'location', 'participants_estimated', 'participants_real', 'insurance', + 'insurance_technic', 'support', 'cost', 'account', 'granted_from', 'notes', 'intern_notes', 'status', + 'project_of_year', 'end_quartal') # action = ['export_as_csv'] date_hierarchy = 'end' readonly_fields = ('end_quartal', 'project_of_year', 'pid', 'finance_id') @@ -53,7 +98,7 @@ class ProjectAdmin(admin.ModelAdmin): @admin.register(BusinessCard) -class BusinessCardAdmin(admin.ModelAdmin): +class BusinessCardAdmin(RequestURLBeforeInternNotesMixin, admin.ModelAdmin): save_as = True search_fields = ('realname', 'service_id', 'granted', 'granted_date', 'project') list_display = ('realname', 'service_id', 'granted', 'granted_date', 'project', 'terms_accepted') @@ -62,33 +107,12 @@ class BusinessCardAdmin(admin.ModelAdmin): date_hierarchy = 'granted_date' readonly_fields = ['service_id'] - fields = [ - 'terms_accepted', - 'realname', - 'email', - 'granted', - 'granted_date', - 'survey_mail_date', - 'mail_state', - 'survey_mail_send', - 'username', - 'project', - 'data', - 'variant', - 'url_of_pic', - 'sent_to', - 'send_data_to_print', - 'request_url', - 'intern_notes', - 'service_id', - ] - class Media: js = ('dropdown/js/base.js', 'dropdown/js/otrs_link.js') @admin.register(Literature) -class LiteratureAdmin(admin.ModelAdmin): +class LiteratureAdmin(RequestURLBeforeInternNotesMixin, admin.ModelAdmin): save_as = True search_fields = ('realname', 'service_id', 'granted', 'granted_date') list_display = ('realname', 'service_id', 'granted', 'granted_date', 'terms_accepted') @@ -96,28 +120,6 @@ class LiteratureAdmin(admin.ModelAdmin): date_hierarchy = 'granted_date' readonly_fields = ['service_id'] - fields = [ - 'terms_accepted', - 'realname', - 'email', - 'granted', - 'granted_date', - 'survey_mail_date', - 'mail_state', - 'survey_mail_send', - 'username', - 'cost', - 'notes', - 'info', - 'source', - 'selfbuy', - 'selfbuy_give_data', - 'selfbuy_data', - 'request_url', - 'intern_notes', - 'service_id', - ] - class Media: js = ('dropdown/js/otrs_link.js',) @@ -131,15 +133,16 @@ class AccountAdmin(admin.ModelAdmin): class HonoraryCertificateAdmin(admin.ModelAdmin): save_as = True search_fields = ['realname', 'granted', 'project__name', 'project__pid'] - list_display = ('realname', 'granted','project') + list_display = ('realname', 'granted', 'project') date_hierarchy = 'granted_date' autocomplete_fields = ['project'] + class Media: js = ('dropdown/js/otrs_link.js',) @admin.register(Library, ELiterature, Software) -class LibraryAdmin(admin.ModelAdmin): +class LibraryAdmin(RequestURLBeforeInternNotesMixin, admin.ModelAdmin): save_as = True search_fields = ('realname', 'service_id', 'granted', 'granted_date') list_display = ('realname', 'service_id', 'granted', 'granted_date') @@ -148,24 +151,6 @@ class LibraryAdmin(admin.ModelAdmin): readonly_fields = ['service_id'] exclude = ['type'] - fields = [ - 'realname', - 'email', - 'granted', - 'granted_date', - 'survey_mail_date', - 'mail_state', - 'survey_mail_send', - 'username', - 'cost', - 'notes', - 'library', - 'duration', - 'request_url', - 'intern_notes', - 'service_id', - ] - class Media: js = ('dropdown/js/otrs_link.js',) @@ -184,7 +169,7 @@ class LibraryAdmin(admin.ModelAdmin): @admin.register(IFG) -class IFGAdmin(admin.ModelAdmin): +class IFGAdmin(RequestURLBeforeInternNotesMixin, admin.ModelAdmin): save_as = True search_fields = ('realname', 'service_id', 'granted', 'granted_date') list_display = ('realname', 'service_id', 'granted', 'granted_date') @@ -192,31 +177,16 @@ class IFGAdmin(admin.ModelAdmin): date_hierarchy = 'granted_date' readonly_fields = ['service_id'] - fields = [ - 'realname', - 'email', - 'granted', - 'granted_date', - 'survey_mail_date', - 'mail_state', - 'survey_mail_send', - 'username', - 'cost', - 'notes', - 'url', - 'request_url', - 'intern_notes', - 'service_id', - ] - class Media: js = ('dropdown/js/otrs_link.js',) + @admin.register(Travel) class TravelAdmin(admin.ModelAdmin): save_as = True search_fields = ['realname', 'service_id', 'granted_date', 'project__name', 'project__pid'] - list_display = ('realname', 'service_id', 'granted', 'granted_date', 'project_end', 'project', 'project_end_quartal') + list_display = ('realname', 'service_id', 'granted', 'granted_date', 'project_end', 'project', + 'project_end_quartal') list_display_links = ('realname', 'project') date_hierarchy = 'project_end' autocomplete_fields = ['project'] @@ -227,7 +197,7 @@ class TravelAdmin(admin.ModelAdmin): @admin.register(Email) -class EmailAdmin(admin.ModelAdmin): +class EmailAdmin(RequestURLBeforeInternNotesMixin, admin.ModelAdmin): save_as = True search_fields = ('realname', 'service_id', 'granted', 'granted_date') list_display = ('realname', 'service_id', 'granted', 'granted_date', 'terms_accepted') @@ -236,31 +206,12 @@ class EmailAdmin(admin.ModelAdmin): radio_fields = {'adult': admin.VERTICAL} readonly_fields = ['service_id'] - fields = [ - 'terms_accepted', - 'realname', - 'email', - 'granted', - 'granted_date', - 'survey_mail_date', - 'mail_state', - 'survey_mail_send', - 'username', - 'domain', - 'address', - 'other', - 'adult', - 'request_url', - 'intern_notes', - 'service_id', - ] - class Media: js = ('dropdown/js/base.js', 'dropdown/js/otrs_link.js') @admin.register(List) -class ListAdmin(admin.ModelAdmin): +class ListAdmin(RequestURLBeforeInternNotesMixin, admin.ModelAdmin): save_as = True search_fields = ('realname', 'service_id', 'granted', 'granted_date') list_display = ('realname', 'service_id', 'granted', 'granted_date', 'terms_accepted') @@ -268,29 +219,12 @@ class ListAdmin(admin.ModelAdmin): date_hierarchy = 'granted_date' readonly_fields = ['service_id'] - fields = [ - 'terms_accepted', - 'realname', - 'email', - 'granted', - 'granted_date', - 'survey_mail_date', - 'mail_state', - 'survey_mail_send', - 'username', - 'domain', - 'address', - 'request_url', - 'intern_notes', - 'service_id', - ] - class Media: js = ('dropdown/js/otrs_link.js',) # commented out because of the individual registering to control displays in admin panel -#admin.site.register([ +# admin.site.register([ # Account, # HonoraryCertificate, # Library, From e4797b9bcdf666aad291a3ae8a63e011a0710fae Mon Sep 17 00:00:00 2001 From: Roman Date: Wed, 8 Oct 2025 12:38:53 +0200 Subject: [PATCH 5/5] Squash duplicate migrations 0100 and 0101 into a single cleaned-up migration --- ..._request_url_email_request_url_and_more.py | 14 +++--- ...alter_businesscard_request_url_and_more.py | 43 ------------------- 2 files changed, 7 insertions(+), 50 deletions(-) delete mode 100644 input/migrations/0101_alter_businesscard_request_url_and_more.py diff --git a/input/migrations/0100_businesscard_request_url_email_request_url_and_more.py b/input/migrations/0100_businesscard_request_url_email_request_url_and_more.py index 13a5057..bc54306 100644 --- a/input/migrations/0100_businesscard_request_url_email_request_url_and_more.py +++ b/input/migrations/0100_businesscard_request_url_email_request_url_and_more.py @@ -1,4 +1,4 @@ -# Generated by Django 5.2.5 on 2025-09-30 11:37 +# Generated by Django 5.2.5 on 2025-10-08 10:37 from django.db import migrations, models @@ -13,31 +13,31 @@ class Migration(migrations.Migration): migrations.AddField( model_name='businesscard', name='request_url', - field=models.URLField(blank=True, max_length=2000, null=True, verbose_name='Antrag (URL)'), + field=models.URLField(max_length=2000, null=True, verbose_name='Antrag (URL)'), ), migrations.AddField( model_name='email', name='request_url', - field=models.URLField(blank=True, max_length=2000, null=True, verbose_name='Antrag (URL)'), + field=models.URLField(max_length=2000, null=True, verbose_name='Antrag (URL)'), ), migrations.AddField( model_name='ifg', name='request_url', - field=models.URLField(blank=True, max_length=2000, null=True, verbose_name='Antrag (URL)'), + field=models.URLField(max_length=2000, null=True, verbose_name='Antrag (URL)'), ), migrations.AddField( model_name='library', name='request_url', - field=models.URLField(blank=True, max_length=2000, null=True, verbose_name='Antrag (URL)'), + field=models.URLField(max_length=2000, null=True, verbose_name='Antrag (URL)'), ), migrations.AddField( model_name='list', name='request_url', - field=models.URLField(blank=True, max_length=2000, null=True, verbose_name='Antrag (URL)'), + field=models.URLField(max_length=2000, null=True, verbose_name='Antrag (URL)'), ), migrations.AddField( model_name='literature', name='request_url', - field=models.URLField(blank=True, max_length=2000, null=True, verbose_name='Antrag (URL)'), + field=models.URLField(max_length=2000, null=True, verbose_name='Antrag (URL)'), ), ] diff --git a/input/migrations/0101_alter_businesscard_request_url_and_more.py b/input/migrations/0101_alter_businesscard_request_url_and_more.py deleted file mode 100644 index efad959..0000000 --- a/input/migrations/0101_alter_businesscard_request_url_and_more.py +++ /dev/null @@ -1,43 +0,0 @@ -# Generated by Django 5.2.5 on 2025-09-30 12:11 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('input', '0100_businesscard_request_url_email_request_url_and_more'), - ] - - operations = [ - migrations.AlterField( - model_name='businesscard', - name='request_url', - field=models.URLField(max_length=2000, null=True, verbose_name='Antrag (URL)'), - ), - migrations.AlterField( - model_name='email', - name='request_url', - field=models.URLField(max_length=2000, null=True, verbose_name='Antrag (URL)'), - ), - migrations.AlterField( - model_name='ifg', - name='request_url', - field=models.URLField(max_length=2000, null=True, verbose_name='Antrag (URL)'), - ), - migrations.AlterField( - model_name='library', - name='request_url', - field=models.URLField(max_length=2000, null=True, verbose_name='Antrag (URL)'), - ), - migrations.AlterField( - model_name='list', - name='request_url', - field=models.URLField(max_length=2000, null=True, verbose_name='Antrag (URL)'), - ), - migrations.AlterField( - model_name='literature', - name='request_url', - field=models.URLField(max_length=2000, null=True, verbose_name='Antrag (URL)'), - ), - ]