Django
Referentie modelveld
Zoeken…
parameters
Parameter | Details |
---|---|
nul | Indien waar, kunnen lege waarden als null in de database worden opgeslagen |
blanco | Als dit waar is, is het veld niet verplicht in formulieren. Als velden leeg worden gelaten, gebruikt Django de standaardveldwaarde. |
keuzes | Een iterabele iterabelen met 2 elementen die kunnen worden gebruikt als keuzes voor dit veld. Indien ingesteld, wordt het veld weergegeven als een vervolgkeuzelijst in de admin. [('m', 'Male'),('f','Female'),('z','Prefer Not to Disclose')] . Om opties te groeperen, nestelt u eenvoudig de waarden: [('Video Source',((1,'YouTube'),(2,'Facebook')),('Audio Source',((3, 'Soundcloud'),(4, 'Spotify'))] |
db_column | Standaard gebruikt django de veldnaam voor de databasekolom. Gebruik dit om een aangepaste naam op te geven |
db_index | Indien True , wordt een index gemaakt op dit veld in de database |
db_tablespace | De tabelruimte die moet worden gebruikt voor de index van dit veld. Dit veld wordt alleen gebruikt als de database-engine dit ondersteunt, anders wordt het genegeerd . |
standaard | De standaardwaarde voor dit veld. Kan een waarde of een opvraagbaar object zijn. Voor veranderlijke standaardwaarden (een lijst, een set, een woordenboek) moet u een opvraagbare gebruiken. Vanwege compatibiliteit met migraties kunt u geen lambdas gebruiken. |
bewerkbare | Indien False , wordt het veld niet getoond in de ModelForm of in een ModelForm . Standaard is True . |
foutmeldingen | Wordt gebruikt om de standaardfoutmeldingen voor dit veld aan te passen. De waarde is een woordenboek, waarbij de sleutels de fout vertegenwoordigen en de waarde het bericht is. Standaardsleutels (voor foutmeldingen) zijn null , blank , invalid , invalid_choice , unique en unique_for_date ; aanvullende foutmeldingen kunnen worden gedefinieerd door aangepaste velden. |
hulp tekst | Tekst die met het veld moet worden weergegeven om gebruikers te helpen. HTML is toegestaan. |
on_delete | Wanneer een object waarnaar wordt verwezen door een ForeignKey wordt verwijderd, emuleert Django het gedrag van de SQL-beperking die is opgegeven door het argument on_delete. Dit is het tweede positionele argument voor zowel de velden ForeignKey als OneToOneField . Andere velden hebben dit argument niet. |
hoofdsleutel | Indien True , is dit veld de primaire sleutel. Django voegt automatisch een primaire sleutel toe; dus dit is alleen vereist als u een aangepaste primaire sleutel wilt maken. U kunt slechts één primaire sleutel per model hebben. |
uniek | Indien True , worden fouten gegenereerd als dubbele waarden worden ingevoerd voor dit veld. Dit is een beperking op databaseniveau en niet alleen een gebruikersinterfaceblok. |
unique_for_date | Stel de waarde in op DateField of DateTimeField en er worden fouten DateField als er dubbele waarden zijn voor dezelfde datum of datum . |
unique_for_month | Vergelijkbaar met unique_for_date , behalve dat de controles beperkt zijn voor de maand. |
unique_for_year | Vergelijkbaar met unique_for_date voor unique_for_date , behalve dat controles beperkt zijn tot het jaar. |
verbose_name | Een vriendelijke naam voor het veld, gebruikt door Django op verschillende plaatsen (zoals het maken van labels in de admin- en modelformulieren). |
validators | Een lijst met validators voor dit veld. |
Opmerkingen
- U kunt uw eigen velden schrijven als u dit nodig vindt
- U kunt functies van de basismodelklasse, meestal de functie
save()
negeren
Nummervelden
Voorbeelden van numerieke velden worden gegeven:
AutoField
Een automatisch oplopend geheel getal dat meestal wordt gebruikt voor primaire sleutels.
from django.db import models
class MyModel(models.Model):
pk = models.AutoField()
Elk model krijgt standaard een primair sleutelveld (
id
). Daarom is het niet nodig om een id-veld in het model te dupliceren voor een primaire sleutel.
BigIntegerField
Een geheel passend aantal van -9223372036854775808
tot 9223372036854775807
( 8 Bytes
).
from django.db import models
class MyModel(models.Model):
number_of_seconds = models.BigIntegerField()
IntegerField
Het IntegerField wordt gebruikt om gehele waarden op te slaan van -2147483648 tot 2147483647 ( 4 Bytes
).
from django.db import models
class Food(models.Model):
name = models.CharField(max_length=255)
calorie = models.IntegerField(default=0)
default
parameter is niet verplicht. Maar het is handig om een standaardwaarde in te stellen.
PositiveIntegerField
Zoals een IntegerField, maar moet positief of nul (0) zijn. Het PositiveIntegerField wordt gebruikt om gehele waarden van 0 tot 2147483647 ( 4 Bytes
) op te slaan. Dit kan handig zijn op een veld dat semantisch positief moet zijn. Als u bijvoorbeeld voedingsmiddelen met calorieën opneemt, mag dit niet negatief zijn. Dit veld voorkomt negatieve waarden via de validaties.
from django.db import models
class Food(models.Model):
name = models.CharField(max_length=255)
calorie = models.PositiveIntegerField(default=0)
default
parameter is niet verplicht. Maar het is handig om een standaardwaarde in te stellen.
SmallIntegerField
Het SmallIntegerField wordt gebruikt om gehele waarden van -32768 tot 32767 ( 2 Bytes
) op te slaan. Dit veld is handig voor waarden en niet voor extremen.
from django.db import models
class Place(models.Model):
name = models.CharField(max_length=255)
temperature = models.SmallIntegerField(null=True)
PositiveSmallIntegerField
Het SmallIntegerField wordt gebruikt om gehele waarden van 0 tot 32767 ( 2 Bytes
) op te slaan. Net als SmallIntegerField is dit veld nuttig voor waarden die niet zo hoog gaan en moet het semantisch positief zijn. Het kan bijvoorbeeld leeftijd opslaan die niet negatief kan zijn.
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)
Naast PositiveSmallIntegerField is handig voor keuzes, dit is de Djangoïsche manier om Enum te implementeren:
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
)
...
Definitie van de keuzes als klassenvariabelen of modulevariabelen volgens de situatie is een goede manier om ze te gebruiken. Als keuzes worden doorgegeven aan het veld zonder beschrijvende namen, dan zal dit verwarring veroorzaken.
DecimalField
Een decimaal getal met vaste precisie, vertegenwoordigd in Python door een decimale instantie. In tegenstelling tot IntegerField en zijn derivaten heeft dit veld 2 verplichte argumenten:
- DecimalField.max_digits : het maximale aantal toegestane cijfers in het nummer. Merk op dat dit aantal groter moet zijn dan of gelijk aan decimale_plaatsen.
- DecimalField.decimal_places : het aantal decimalen dat moet worden opgeslagen met het nummer.
Als u getallen tot 99 met 3 decimalen wilt opslaan, moet u max_digits=5
en decimal_places=3
:
class Place(models.Model):
name = models.CharField(max_length=255)
atmospheric_pressure = models.DecimalField(max_digits=5, decimal_places=3)
BinaryField
Dit is een gespecialiseerd veld dat wordt gebruikt om binaire gegevens op te slaan. Het accepteert alleen bytes . Gegevens worden bij opslag geserialiseerd met base64.
Aangezien dit binaire gegevens opslaat, kan dit veld niet in een filter worden gebruikt.
from django.db import models
class MyModel(models.Model):
my_binary_data = models.BinaryField()
Charfield
Het CharField wordt gebruikt voor het opslaan van gedefinieerde tekstlengtes. In het onderstaande voorbeeld kunnen maximaal 128 tekens tekst in het veld worden opgeslagen. Als u een tekenreeks langer invoert, wordt een validatiefout gegenereerd.
from django.db import models
class MyModel(models.Model):
name = models.CharField(max_length=128, blank=True)
DateTimeField
DateTimeField wordt gebruikt om datum-tijdwaarden op te slaan.
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)
Een DateTimeField
heeft twee optionele parameters:
auto_now_add
stelt de waarde van het veld in op de huidige datumtijd wanneer het object wordt gemaakt.auto_now
stelt de waarde van het veld in op de huidige datumtijd telkens wanneer het veld wordt opgeslagen.
Deze opties en de default
sluiten elkaar uit.
Vreemde sleutel
Het veld ForeignKey wordt gebruikt om een many-to-one
relatie tussen modellen te maken. Niet zoals de meeste andere velden vereist positionele argumenten. Het volgende voorbeeld toont de relatie tussen auto en eigenaar:
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)
Het eerste argument van het veld is de klasse waaraan het model is gerelateerd. Het tweede positionele argument is het argument on_delete
. In de huidige versies is dit argument niet vereist, maar wel in Django 2.0. De standaardfunctionaliteit van het argument wordt als volgt weergegeven:
class Car(model.Model)
owner = models.ForeignKey('Person', on_delete=models.CASCADE)
...
Dit zorgt ervoor dat Auto-objecten uit het model worden verwijderd wanneer de eigenaar van het Persoonsmodel wordt verwijderd. Dit is de standaardfunctionaliteit.
class Car(model.Model)
owner = models.ForeignKey('Person', on_delete=models.PROTECT)
...
Dit voorkomt dat Person-objecten worden verwijderd als ze gerelateerd zijn aan ten minste één Car-object. Alle Car-objecten die verwijzen naar een Person-object, moeten eerst worden verwijderd. En dan kan het Persoonsobject worden verwijderd.