0 Tage Serie
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
python
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 models
class 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