feat: Excel-Import glätten und Dokumentlistenaktionen korrigieren

This commit is contained in:
2026-07-22 14:34:14 +02:00
parent 6df5c101c5
commit eb503df94b
11 changed files with 129 additions and 36 deletions
+30 -6
View File
@@ -2,6 +2,7 @@ from django import forms
from django.conf import settings
from django.contrib.contenttypes.models import ContentType
from django.db.models import Q
from django.utils.html import format_html
from utilities.forms import get_field_value
from utilities.forms.fields import (
ContentTypeChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, SlugField,
@@ -13,6 +14,14 @@ from dcim.models import Device
from .models import Document, DocumentAssignment, DocumentCategory
def help_label(label, description):
return format_html(
'{} <span class="mdi mdi-help-circle-outline text-muted" title="{}" '
'data-bs-toggle="tooltip" aria-label="{}"></span>',
label, description, description,
)
def allowed_content_types():
labels = settings.PLUGINS_CONFIG.get("netbox_documentation", {}).get(
"allowed_object_types", []
@@ -105,17 +114,32 @@ class DocumentCategoryForm(NetBoxModelForm):
class ImportForm(forms.Form):
file = forms.FileField(label="Word-, Excel- oder PDF-Datei")
title = forms.CharField(max_length=200, required=False, help_text="Leer lassen, um den Dateinamen zu verwenden")
append = forms.BooleanField(required=False, initial=False, label="An bestehende Dokumentation anhängen")
document = forms.ModelChoiceField(queryset=Document.objects.all(), required=False, label="Bestehende Dokumentation")
title = forms.CharField(max_length=200, required=False, label=help_label(
"Titel", "Leer lassen, um den Dateinamen als Titel zu verwenden. Beim Mehrblattimport werden die Blattnamen verwendet."
))
append = forms.BooleanField(required=False, initial=False, label=help_label(
"An bestehende Dokumentation anhängen", "Fügt den importierten Inhalt am Ende einer vorhandenen Dokumentation an."
))
document = forms.ModelChoiceField(queryset=Document.objects.all(), required=False, label=help_label(
"Bestehende Dokumentation", "Zieldokumentation für die Funktion Anhängen."
))
excel_sheets_as_documents = forms.BooleanField(
required=False,
label="Excel mit mehreren Arbeitsblättern je Blatt eine Dokumentation",
label=help_label(
"Excel mit mehreren Arbeitsblättern je Blatt eine Dokumentation",
"Erstellt aus jedem nicht leeren Excel-Arbeitsblatt eine eigene Dokumentation im gewählten Zielordner.",
),
)
flatten_excel_tables = forms.BooleanField(
required=False,
label=help_label(
"Excel-Tabellen glätten",
"Wandelt jede Tabellenzeile in einen lesbaren Textblock aus Feldnamen und Wert um, statt eine Tabelle zu erzeugen.",
),
)
category = DynamicModelChoiceField(
queryset=DocumentCategory.objects.all(), required=False,
label="Zielordner / Kategorie",
help_text="Für den Mehrblattimport verpflichtend.",
label=help_label("Zielordner / Kategorie", "Für den Excel-Mehrblattimport verpflichtend."),
)
def __init__(self, *args, user=None, **kwargs):