python / intermediate
Snippet
Django Model Meta Optionen und Feldreihenfolge
Die Django Meta-Klasse konfiguriert model-level Verhalten ohne Datenbankspalten hinzuzufügen. Die ordering-Option sortiert automatisch QuerySet-Ergebnisse und verbessert die Konsistenz. Indizes optimieren die Abfrageleistung bei häufig gefilterten Feldern. Constraints erzwingen Datenvalidierung auf Datenbankebene und fangen ungültige Daten selbst bei rohem SQL ab.
snippet.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from django.db import modelsclass Product(models.Model):name = models.CharField(max_length=100)price = models.DecimalField(max_digits=10, decimal_places=2)description = models.TextField()created_at = models.DateTimeField(auto_now_add=True)class Meta:ordering = ['-created_at', 'name']indexes = [models.Index(fields=['price', 'name']),models.Index(fields=['created_at']),]constraints = [models.CheckConstraint(check=models.Q(price__gte=0),name='product_price_positive'),]verbose_name = 'Product'verbose_name_plural = 'Products'def __str__(self):return self.name
django
Erklärung
1
class Meta:
Innere Klasse mit model-level Konfigurationsoptionen
2
ordering = ['-created_at', 'name']
Sortiert nach created_at absteigend (Minus-Präfix), dann name aufsteigend
3
models.Index(fields=['price', 'name'])
Zusammengesetzter Index für Abfragen, die nach Preis und Name filtern
4
models.CheckConstraint(check=models.Q(price__gte=0))
Datenbank-Level Validierung, die sicherstellt, dass Preis nicht negativ sein kann