Open-Source-Webframework: Django 5 berechnet und gruppiert Felder

Das in Python entwickelte Open-Source-Framework vereinfacht den Umgang mit Formularfeldern. Außerdem erstellt es Feldinhalte anhand von Datenbankwerten.

In Pocket speichern vorlesen Druckansicht 4 Kommentare lesen

(Bild: Sergey Goryachev/Shutterstock)

Lesezeit: 2 Min.
Inhaltsverzeichnis

Das Open-Source-Webframework Django ist in Version 5.0 erschienen. Die meisten Neuheiten betreffen den Umgang mit Formularen. Das Release bringt Methoden zum Berechnen von Standardwerten und Feldinhalten über die Datenbank. Feldgruppen vereinfachen das Einbinden von Formularfeldern mit ihren zugehörigen Beschreibungen und Hilfstexten.

Der neue Parameter Field.db_default dient dazu, Standardwerte für Felder zu berechnen. Das Ergebnis können feste Vorgaben sein, etwa numerische Werte oder Strings, aber auch Datenbankfunktionen wie Now() sein, wie folgendes Beispiel aus den Release Notes zeigt:

from django.db import models
from django.db.models.functions import Now, Pi


class MyModel(models.Model):
    age = models.IntegerField(db_default=18)
    created = models.DateTimeField(db_default=Now())
    circumference = models.FloatField(db_default=2 * Pi())

Die Kombination aus Literalen und Funktionen ist ebenfalls erlaubt. Die Funktion zum Berechnen der Standardwerte darf allerdings nicht auf andere Felder der Datenbank zugreifen.

Ebenfalls neu ist GeneratedField zum Definieren einer Spalte, die ihren Wert aus anderen Spalten berechnet:

from django.db import models
from django.db.models import F


class Square(models.Model):
    side = models.IntegerField()
    area = models.GeneratedField(
        expression=F("side") * F("side"),
        output_field=models.BigIntegerField(),
        db_persist=True,
    )

Im ersten Parameter findet sich die Berechnung und im zweiten der Spaltentyp. Der Boolesche Parameter db_persist gibt an, ob Django die Inhalte tatsächlich in der Datenbank speichert oder sie als virtuelle Spalte anlegt. Wie und ob die generierten Felder funktionieren, hängt von der Datenbank im Backend ab.

Die Verantwortung für das korrekte Zusammenspiel liegt auf Entwicklerseite: Django überprüft die Kompatibilität nicht. In der Dokumentation finden sich Links zum Umgang mit generierten Spalten in MariaDB, MySQL, Oracle, PostgreSQL und SQLite.

Feldgruppen vereinfachen den Umgang mit Formularfeldern, in dem sie die zugehörigen Elemente wie Label, Widget, Hilfetext und Fehlermeldungen zusammenfassen. Die Funktion as_field_group() verwendet für die Darstellung die Vorlage unter django/forms/field.html, die sich über field_template_name auf Projektebene oder direkt auf Feldebene anpassen lässt. Die direkte Modifikation der Darstellung ist über die Methode render ebenfalls möglich.

Weitere Neuerungen wie die erweiterten Auswahlmöglichkeiten für Field.choices und ChoiceField.choices, die nun auch Mappings und Rückgabewerte von Funktionsaufrufen verwenden können, finden sich in den Release Notes zu Django 5.0.

Django auf MTV

Django blickt seit dem ersten öffentlichen Release Ende 2005 auf eine achtzehnjährige Geschichte zurück. Es kommt unter anderem bei Instagram, Mozilla, Bitbucket und der Washington Times zum Einsatz. Das seit 2008 unter der Verwaltung der Django Software Foundation stehende Framework entstand ursprünglich 2003 bei der Newsseite der Tageszeitung Lawrence Journal-World.

Das Framework, das seinen Namen dem Jazz-Gitarristen Django Reinhardt verdankt, setzt auf das MVC-Prinzip (Model View Controller) zum Unterteilen der Software in Datenmodell, Präsentation und Programmsteuerung. Die Macher sprechen in der FAQ von einer abgewandelten Form, die aus Modell, Vorlage und Präsentation besteht und daher eigentlich MTV für Model, Template and View heißen müsste.

Parallel zu Django 5.0 ist mit Django 4.2.8 das letzte reguläre Bugfix-Release der vor zwei Jahren gestarteten 4er-Serie von Django erschienen. Da es sich bei Django 4.2 um ein LTS-Release (Long-term Support) handelt, wird es allerdings noch bis April 2026 mit Fixes versorgt, die Sicherheitslücken oder Datenverlust beheben.

(rme)