{"id":2524,"date":"2023-12-06T08:13:14","date_gmt":"2023-12-06T08:13:14","guid":{"rendered":"https:\/\/byte-bucket.com\/2023\/12\/06\/django-5-0-veroeffentlicht-neue-funktionen-fuer-formulare-und-generierte-spalten\/"},"modified":"2023-12-06T08:13:14","modified_gmt":"2023-12-06T08:13:14","slug":"django-5-0-veroeffentlicht-neue-funktionen-fuer-formulare-und-generierte-spalten","status":"publish","type":"post","link":"https:\/\/byte-bucket.com\/?p=2524","title":{"rendered":"Django 5.0 ver\u00f6ffentlicht: Neue Funktionen f\u00fcr Formulare und generierte Spalten"},"content":{"rendered":"<p>Django, eines der bekanntesten Open-Source-Webframeworks, hat k\u00fcrzlich die neueste Version 5.0 ver\u00f6ffentlicht. Diese Version bringt einige wichtige \u00c4nderungen hinsichtlich der Handhabung von Formularen mit sich.<\/p>\n<p>Eine der neuen Funktionen erm\u00f6glicht es Entwicklern, Standardwerte und Feldinhalte \u00fcber die Datenbank zu berechnen. Hierzu kann der neue Parameter Field.db_default verwendet werden. Dieser kann sowohl feste Werte wie Zahlen oder Strings enthalten, als auch Datenbankfunktionen wie Now(). Ein Beispiel aus den Release Notes verdeutlicht die Verwendung:<\/p>\n<p>&#8222;`python<br \/>\nfrom django.db import models<br \/>\nfrom django.db.models.functions import Now, Pi<\/p>\n<p>class MyModel(models.Model):<br \/>\n    age = models.IntegerField(default=18)<br \/>\n    created = models.DateTimeField(default=Now())<br \/>\n    circumference = models.FloatField(default=2 * Pi())<br \/>\n&#8222;`<\/p>\n<p>Es ist auch m\u00f6glich, eine Kombination aus Literalen und Funktionen zu verwenden. Es ist jedoch nicht erlaubt, dass die Funktion zum Berechnen der Standardwerte auf andere Datenbankfelder zugreift.<\/p>\n<p>Eine weitere neue Funktion ist die Verwendung von GeneratedField zur Definition einer Spalte, deren Wert aus anderen Spalten berechnet wird. Im folgenden Beispiel wird die Klasse Square gezeigt, in der die Seitenl\u00e4nge (side) und die Fl\u00e4che (area) berechnet werden:<\/p>\n<p>&#8222;`python<br \/>\nfrom django.db import models<br \/>\nfrom django.db.models import F<\/p>\n<p>class Square(models.Model):<br \/>\n    side = models.IntegerField()<br \/>\n    area = models.GeneratedField(<br \/>\n        expression=F(side) * F(side),<br \/>\n        output_field=models.BigIntegerField(),<br \/>\n        db_persist=True,<br \/>\n    )<br \/>\n&#8222;`<\/p>\n<p>Im ersten Parameter wird die Berechnung definiert und im zweiten Parameter der Spaltentyp. Mit dem booleschen Parameter db_persist kann festgelegt werden, ob Django die Inhalte tats\u00e4chlich in der Datenbank speichert oder sie lediglich als virtuelle Spalte anlegt. Es liegt in der Verantwortung der Entwickler sicherzustellen, dass diese generierten Felder korrekt mit der Datenbank zusammenarbeiten, da Django die Kompatibilit\u00e4t nicht automatisch \u00fcberpr\u00fcft.<\/p>\n<p>Die Dokumentation enth\u00e4lt Informationen zur Verwendung von generierten Spalten in verschiedenen Datenbanken wie MariaDB, MySQL, Oracle, PostgreSQL und SQLite.<\/p>\n<p>Eine weitere Verbesserung in Django 5.0 betrifft die Handhabung von Formularfeldern. Durch die Verwendung von Feldgruppen k\u00f6nnen alle zugeh\u00f6rigen Elemente wie Label, Widget, Hilfetext und Fehlermeldungen zusammengefasst werden. Die Funktion as_field_group() nutzt eine Vorlage zur Darstellung und kann auf Projektebene oder direkt auf Feldebene angepasst werden.<\/p>\n<p>Au\u00dferdem bietet Django 5.0 erweiterte Auswahlm\u00f6glichkeiten f\u00fcr Field.choices und ChoiceField.choices. Diese erm\u00f6glichen nun auch die Verwendung von Mappings und R\u00fcckgabewerten von Funktionsaufrufen.<\/p>\n<p>Parallel zur Ver\u00f6ffentlichung von Django 5.0 wurde auch das letzte regul\u00e4re Bugfix-Release der 4er-Serie von Django ver\u00f6ffentlicht. Django 4.2.8 ist ein LTS-Release (Long-term Support) und wird bis April 2026 weiterhin mit Fixes versorgt, um Sicherheitsl\u00fccken und Datenverluste zu beheben.<\/p>\n<p>Schlagw\u00f6rter: Django 50 + Formulare + Feldgruppen<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Django, eines der bekanntesten Open-Source-Webframeworks, hat k\u00fcrzlich die neueste Version 5.0 ver\u00f6ffentlicht. Diese Version bringt einige wichtige \u00c4nderungen hinsichtlich der Handhabung von Formularen mit sich. Eine der neuen Funktionen erm\u00f6glicht es Entwicklern, Standardwerte und Feldinhalte \u00fcber die Datenbank zu berechnen. Hierzu kann der neue Parameter Field.db_default verwendet werden. Dieser kann&#46;&#46;&#46;<\/p>\n","protected":false},"author":4,"featured_media":2523,"comment_status":"","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2524","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/byte-bucket.com\/index.php?rest_route=\/wp\/v2\/posts\/2524","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/byte-bucket.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/byte-bucket.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/byte-bucket.com\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/byte-bucket.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2524"}],"version-history":[{"count":0,"href":"https:\/\/byte-bucket.com\/index.php?rest_route=\/wp\/v2\/posts\/2524\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/byte-bucket.com\/index.php?rest_route=\/wp\/v2\/media\/2523"}],"wp:attachment":[{"href":"https:\/\/byte-bucket.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2524"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/byte-bucket.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2524"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/byte-bucket.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2524"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}