Django
Modellfeldreferenz
Suche…
Parameter
Parameter | Einzelheiten |
---|---|
Null | Bei true werden leere Werte in der Datenbank möglicherweise als null gespeichert |
leer | Wenn true, ist das Feld in Formularen nicht erforderlich. Wenn Felder leer bleiben, verwendet Django den Standardfeldwert. |
Wahlmöglichkeiten | Eine Iteration von 2-Element-Iterablen, die als Auswahl für dieses Feld verwendet werden sollen. Wenn gesetzt, wird das Feld als Dropdown-Liste im Admin angezeigt. [('m', 'Male'),('f','Female'),('z','Prefer Not to Disclose')] . Um Optionen zu gruppieren, verschachteln Sie einfach die Werte: [('Video Source',((1,'YouTube'),(2,'Facebook')),('Audio Source',((3, 'Soundcloud'),(4, 'Spotify'))] |
db_column | Standardmäßig verwendet django den Feldnamen für die Datenbankspalte. Verwenden Sie dies, um einen benutzerdefinierten Namen anzugeben |
db_index | Bei True wird für dieses Feld in der Datenbank ein Index erstellt |
db_tablespace | Der Tabellenbereich, der für den Index dieses Felds verwendet werden soll. Dieses Feld wird nur verwendet, wenn es vom Datenbankmodul unterstützt wird. Andernfalls wird es ignoriert . |
Standard | Der Standardwert für dieses Feld. Kann ein Wert oder ein aufrufbares Objekt sein. Für veränderliche Standardwerte (eine Liste, ein Set, ein Wörterbuch) müssen Sie ein aufrufbares verwenden. Aufgrund der Kompatibilität mit Migrationen können Sie keine Lambdas verwenden. |
bearbeitbar | Bei False wird das Feld weder im ModelForm noch in einer ModelForm . Standardeinstellung ist " True . |
Fehlermeldungen | Dient zum Anpassen der Standardfehlermeldungen, die für dieses Feld angezeigt werden. Der Wert ist ein Wörterbuch, wobei die Schlüssel den Fehler und der Wert die Nachricht darstellen. Standardschlüssel (für Fehlermeldungen) sind null , blank , invalid , invalid_choice , unique und unique_for_date ; Zusätzliche Fehlermeldungen können durch benutzerdefinierte Felder definiert werden. |
Hilfstext | Text, der mit dem Feld angezeigt werden soll, um Benutzer zu unterstützen. HTML ist erlaubt. |
on_delete | Wenn ein von einem ForeignKey referenziertes Objekt gelöscht wird, emuliert Django das Verhalten der durch das Argument on_delete angegebenen SQL-Einschränkung. Dies ist das zweite Positionsargument für die Felder ForeignKey und OneToOneField . Andere Felder haben dieses Argument nicht. |
Primärschlüssel | Bei True ist dieses Feld der Primärschlüssel. Django fügt automatisch einen Primärschlüssel hinzu. Dies ist nur erforderlich, wenn Sie einen benutzerdefinierten Primärschlüssel erstellen möchten. Sie können nur einen Primärschlüssel pro Modell verwenden. |
einzigartig | Bei True werden Fehler ausgegeben, wenn doppelte Werte für dieses Feld eingegeben werden. Dies ist eine Einschränkung auf Datenbankebene und nicht einfach ein Benutzeroberflächenblock. |
unique_for_date | DateField Sie den Wert auf DateField oder DateTimeField . Wenn doppelte Werte für dasselbe Datum oder Datum vorhanden sind, werden Fehler DateTimeField . |
unique_for_month | Ähnlich wie unique_for_date , außer dass die Prüfungen für den Monat begrenzt sind. |
unique_for_year | Ähnlich wie unique_for_date , außer dass die Prüfungen auf das Jahr beschränkt sind. |
verbose_name | Ein benutzerfreundlicher Name für das Feld, der von Django an verschiedenen Stellen verwendet wird (z. B. Erstellen von Labels in den Administrator- und Modellformularen). |
Validatoren | Eine Liste von Validatoren für dieses Feld. |
Bemerkungen
- Sie können Ihre eigenen Felder schreiben, wenn Sie es für nötig halten
- Sie können Funktionen der Basismodellklasse überschreiben, am häufigsten die Funktion
save()
Anzahl Felder
Beispiele für numerische Felder sind angegeben:
AutoField
Eine automatisch inkrementierende Ganzzahl, die im Allgemeinen für Primärschlüssel verwendet wird.
from django.db import models
class MyModel(models.Model):
pk = models.AutoField()
Jedes Modell erhält standardmäßig ein Primärschlüsselfeld (
id
). Daher ist es nicht erforderlich, ein ID-Feld im Modell für die Zwecke eines Primärschlüssels zu duplizieren.
BigIntegerField
Eine ganzzahlige Zahl von -9223372036854775808
bis 9223372036854775807
( 8 Bytes
).
from django.db import models
class MyModel(models.Model):
number_of_seconds = models.BigIntegerField()
IntegerField
Das IntegerField wird verwendet, um ganzzahlige Werte von -2147483648 bis 2147483647 ( 4 Bytes
) zu speichern.
from django.db import models
class Food(models.Model):
name = models.CharField(max_length=255)
calorie = models.IntegerField(default=0)
default
ist nicht obligatorisch. Es ist jedoch nützlich, einen Standardwert festzulegen.
PositiveIntegerField
Wie ein IntegerField, muss aber entweder positiv oder null (0) sein. Das PositiveIntegerField wird zum Speichern von Integerwerten von 0 bis 2147483647 ( 4 Bytes
) verwendet. Dies kann bei Feldern hilfreich sein, die semantisch positiv sein sollten. Wenn Sie beispielsweise Nahrungsmittel mit ihren Kalorien aufnehmen, sollte dies nicht negativ sein. Dieses Feld verhindert negative Werte durch seine Validierungen.
from django.db import models
class Food(models.Model):
name = models.CharField(max_length=255)
calorie = models.PositiveIntegerField(default=0)
default
ist nicht obligatorisch. Es ist jedoch nützlich, einen Standardwert festzulegen.
SmallIntegerField
Das SmallIntegerField wird verwendet, um ganzzahlige Werte von -32768 bis 32767 ( 2 Bytes
) zu speichern. Dieses Feld ist nützlich für Werte, die keine Extremwerte sind.
from django.db import models
class Place(models.Model):
name = models.CharField(max_length=255)
temperature = models.SmallIntegerField(null=True)
PositiveSmallIntegerField
Das SmallIntegerField wird verwendet, um ganzzahlige Werte von 0 bis 32767 ( 2 Bytes
) zu speichern. Genau wie SmallIntegerField ist dieses Feld für Werte hilfreich, die nicht so hoch gehen, und sollte semantisch positiv sein. Beispielsweise kann es ein Alter speichern, das nicht negativ sein kann.
from django.db import models
class Staff(models.Model):
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
age = models.PositiveSmallIntegerField(null=True)
Neben PositiveSmallIntegerField ist dies für die Auswahl auch der Djangoic-Weg, Enum zu implementieren:
from django.db import models
from django.utils.translation import gettext as _
APPLICATION_NEW = 1
APPLICATION_RECEIVED = 2
APPLICATION_APPROVED = 3
APPLICATION_REJECTED = 4
APLICATION_CHOICES = (
(APPLICATION_NEW, _('New')),
(APPLICATION_RECEIVED, _('Received')),
(APPLICATION_APPROVED, _('Approved')),
(APPLICATION_REJECTED, _('Rejected')),
)
class JobApplication(models.Model):
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
status = models.PositiveSmallIntegerField(
choices=APLICATION_CHOICES,
default=APPLICATION_NEW
)
...
Die Definition der Auswahlmöglichkeiten als Klassenvariablen oder Modulvariablen entsprechend der Situation ist eine gute Möglichkeit, sie zu verwenden. Wenn Auswahlfelder ohne Anzeigenamen übergeben werden, führt dies zu Verwirrung.
Dezimalfeld
Eine Dezimalzahl mit fester Genauigkeit, die in Python durch eine Dezimal-Instanz dargestellt wird. Im Gegensatz zu IntegerField und seinen Ableitungen hat dieses Feld 2 erforderliche Argumente:
- DecimalField.max_digits : Die maximal zulässige Anzahl von Ziffern in der Anzahl. Beachten Sie, dass diese Anzahl größer oder gleich decimal_places sein muss.
- DecimalField.decimal_places : Die Anzahl der Dezimalstellen, die mit der Anzahl gespeichert werden sollen.
Wenn Sie Zahlen mit bis zu 99 Nachkommastellen speichern möchten, müssen Sie max_digits=5
und decimal_places=3
:
class Place(models.Model):
name = models.CharField(max_length=255)
atmospheric_pressure = models.DecimalField(max_digits=5, decimal_places=3)
BinaryField
Dies ist ein spezielles Feld, in dem binäre Daten gespeichert werden. Es akzeptiert nur Bytes . Die Daten werden bei der Speicherung base64 serialisiert.
Da dies binäre Daten speichert, kann dieses Feld nicht in einem Filter verwendet werden.
from django.db import models
class MyModel(models.Model):
my_binary_data = models.BinaryField()
CharField
Das CharField wird zum Speichern definierter Textlängen verwendet. In dem folgenden Beispiel können bis zu 128 Zeichen Text in dem Feld gespeichert werden. Wenn Sie eine längere Zeichenfolge eingeben, wird ein Validierungsfehler ausgelöst.
from django.db import models
class MyModel(models.Model):
name = models.CharField(max_length=128, blank=True)
DateTimeField
DateTimeField wird zum Speichern von Datumszeitwerten verwendet.
class MyModel(models.Model):
start_time = models.DateFimeField(null=True, blank=True)
created_on = models.DateTimeField(auto_now_add=True)
updated_on = models.DateTimeField(auto_now=True)
Ein DateTimeField
hat zwei optionale Parameter:
auto_now_add
setzt den Wert des Feldes auf die aktuelle Datumszeit, wenn das Objekt erstellt wird.auto_now
setzt den Wert des Felds bei jeder Speicherung des Felds auf die aktuelle Datumszeit.
Diese Optionen und der default
sich gegenseitig aus.
Unbekannter Schlüssel
Das Feld ForeignKey dient zum Erstellen einer many-to-one
Beziehung zwischen Modellen. Nicht wie bei den meisten anderen Feldern sind Positionsargumente erforderlich. Das folgende Beispiel zeigt die Beziehung zwischen Auto und Besitzer:
from django.db import models
class Person(models.Model):
GENDER_FEMALE = 'F'
GENDER_MALE = 'M'
GENDER_CHOICES = (
(GENDER_FEMALE, 'Female'),
(GENDER_MALE, 'Male'),
)
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
age = models.SmallIntegerField()
class Car(model.Model)
owner = models.ForeignKey('Person')
plate = models.CharField(max_length=15)
brand = models.CharField(max_length=50)
model = models.CharField(max_length=50)
color = models.CharField(max_length=50)
Das erste Argument des Feldes ist die Klasse, auf die sich das Modell bezieht. Das zweite Positionsargument ist on_delete
Argument on_delete
. In den aktuellen Versionen ist dieses Argument nicht erforderlich, aber in Django 2.0 erforderlich. Die Standardfunktionalität des Arguments wird wie folgt angezeigt:
class Car(model.Model)
owner = models.ForeignKey('Person', on_delete=models.CASCADE)
...
Dies bewirkt, dass Car-Objekte aus dem Modell gelöscht werden, wenn ihr Besitzer aus dem Personenmodell gelöscht wird. Dies ist die Standardfunktionalität.
class Car(model.Model)
owner = models.ForeignKey('Person', on_delete=models.PROTECT)
...
Dadurch wird verhindert, dass Personenobjekte gelöscht werden, wenn sie mit mindestens einem Car-Objekt verknüpft sind. Alle Car-Objekte, die auf ein Personenobjekt verweisen, sollten zuerst gelöscht werden. Und dann kann das Personenobjekt gelöscht werden.