- Aufgabe.erstellt_am für implizite 7-Tage-Fälligkeit - frist_effektiv property; ist_ueberfaellig nutzt sie - AufgabenVerknuepfung (GenericForeignKey) mit HTMX-Panel - ExternalIssue (OneToOne) mit IssueAdapter-ABC und HTMX-Panel - link_registry.py und issue_facade.py als zentrale Registries - 8 neue Tests, 76 gesamt grün Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
27 lines
835 B
Python
27 lines
835 B
Python
from django.contrib.contenttypes.models import ContentType
|
|
|
|
|
|
_VERKNUEPFBARE_MODELLE = [
|
|
('lose', 'Anforderung'),
|
|
('lose', 'Los'),
|
|
('aufgaben', 'Bieterfrage'),
|
|
('dokumente', 'Dokument'),
|
|
('preise', 'Preispunkt'),
|
|
]
|
|
|
|
|
|
def verknuepfbare_typen():
|
|
"""Gibt eine geordnete Liste (ContentType, label) der verknüpfbaren Typen zurück."""
|
|
result = []
|
|
for app_label, model_name in _VERKNUEPFBARE_MODELLE:
|
|
try:
|
|
ct = ContentType.objects.get(app_label=app_label, model=model_name.lower())
|
|
result.append((ct, f'{ct.app_label} / {model_name}'))
|
|
except ContentType.DoesNotExist:
|
|
pass
|
|
return result
|
|
|
|
|
|
def ziel_choices():
|
|
"""Gibt (content_type_id, label)-Tupel für ein ChoiceField zurück."""
|
|
return [(ct.pk, label) for ct, label in verknuepfbare_typen()]
|