Django
Modellfältreferens
Sök…
parametrar
Parameter | detaljer |
---|---|
null | Om det är sant kan tomma värden lagras som null i databasen |
tom | Om det är sant, kommer fältet inte att krävas i formulär. Om fält lämnas tomma använder Django standardfältvärdet. |
val | En iterable av 2-element iterables som kan användas som val för detta fält. Om inställt, visas fältet som en listruta i administratören. [('m', 'Male'),('f','Female'),('z','Prefer Not to Disclose')] . För att gruppera alternativ, bo bara värdena: [('Video Source',((1,'YouTube'),(2,'Facebook')),('Audio Source',((3, 'Soundcloud'),(4, 'Spotify'))] |
db_column | Som standard använder django fältnamnet för databaskolumnen. Använd detta för att ange ett anpassat namn |
db_index | Om det är True skapas ett index i det här fältet i databasen |
db_tablespace | Tabellområdet som ska användas för det här fältets index. Detta fält används endast om databasmotorn stöder det, annars ignoreras det . |
standard | Standardvärdet för detta fält. Kan vara ett värde eller ett konverterbart objekt. För muterbara standardvärden (en lista, en uppsättning, en ordlista) måste du använda en räknaren. På grund av kompatibilitet med migreringar kan du inte använda lambdas. |
redigerbar | Om det är False visas fältet inte i modelladministratören eller i någon ModelForm . Standard är True . |
felmeddelanden | Används för att anpassa standardfelmeddelandena som visas för detta fält. Värdet är en ordlista med knapparna som representerar felet och värdet är meddelandet. Standardnycklar (för felmeddelanden) är null , blank , invalid , invalid_choice , unique och unique_for_date ; ytterligare felmeddelanden kan definieras av anpassade fält. |
Hjälp text | Text som ska visas med fältet för att hjälpa användare. HTML är tillåtet. |
on_delete | När ett objekt som refereras av en ForeignKey tas bort kommer Django att emulera beteendet hos SQL-begränsningen som specificeras av on_delete-argumentet. Detta är det andra positionsargumentet för både ForeignKey och OneToOneField . Andra fält har inte detta argument. |
primärnyckel | Om det är True kommer detta fält att vara den primära nyckeln. Django lägger automatiskt till en primär nyckel; så detta krävs endast om du vill skapa en anpassad primärnyckel. Du kan bara ha en primär nyckel per modell. |
unik | Om det är True , tas fel upp om dubbla värden anges för det här fältet. Detta är en databasbegränsning och inte bara ett användargränssnittsblock. |
unique_for_date | Ställ in värdet på ett DateField eller DateTimeField , och fel kommer att tas upp om det finns duplicerade värden för samma datum eller datumtid . |
unique_for_month | Liknar unique_for_date , förutom att kontroller är begränsade för månaden. |
unique_for_year | Liknar unique_for_date , förutom att kontroller är begränsade till året. |
verbose_name | Ett vänligt namn på fältet, som används av django på olika platser (som att skapa etiketter i admin och modellformer). |
validerare | En lista över validerare för detta fält. |
Anmärkningar
- Du kan skriva egna fält om du finner det nödvändigt
- Du kan åsidosätta funktioner i basmodellklassen, vanligtvis
save()
-funktionen
Antal fält
Exempel på numeriska fält ges:
Auto
Ett automatisk inkrementerande heltal som vanligtvis används för primärnycklar.
from django.db import models
class MyModel(models.Model):
pk = models.AutoField()
Varje modell får som standard ett primärt nyckelfält (kallat
id
). Därför är det inte nödvändigt att kopiera ett ID-fält i modellen för en primärnyckel.
BigIntegerField
Ett heltalskopplingsnummer från -9223372036854775808
till 9223372036854775807
( 8 Bytes
).
from django.db import models
class MyModel(models.Model):
number_of_seconds = models.BigIntegerField()
IntegerField
IntegerField används för att lagra heltal från -2147483648 till 2147483647 ( 4 Bytes
).
from django.db import models
class Food(models.Model):
name = models.CharField(max_length=255)
calorie = models.IntegerField(default=0)
default
är inte obligatorisk. Men det är användbart att ställa in ett standardvärde.
PositiveIntegerField
Som ett heltalsfält, men måste vara antingen positivt eller noll (0). PositiveIntegerField används för att lagra heltal från 0 till 2147483647 ( 4 Bytes
). Detta kan vara användbart på fält som bör vara semantiskt positivt. Om du till exempel registrerar mat med kalorierna bör det inte vara negativt. Detta fält förhindrar negativa värden via dess valideringar.
from django.db import models
class Food(models.Model):
name = models.CharField(max_length=255)
calorie = models.PositiveIntegerField(default=0)
default
är inte obligatorisk. Men det är användbart att ställa in ett standardvärde.
SmallIntegerField
SmallIntegerField används för att lagra heltal från -32768 till 32767 ( 2 Bytes
). Detta fält är användbart för värden som inte är extremer.
from django.db import models
class Place(models.Model):
name = models.CharField(max_length=255)
temperature = models.SmallIntegerField(null=True)
PositiveSmallIntegerField
SmallIntegerField används för att lagra heltal från 0 till 32767 ( 2 Bytes
). Precis som SmallIntegerField är detta fält användbart för värden som inte går så högt och bör vara semantiskt positiva. Det kan till exempel lagra ålder som inte kan vara negativ.
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)
Förutom PositiveSmallIntegerField är användbart för val, detta är det djangoiska sättet att implementera Enum:
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
)
...
Definition av val som klassvariabler eller modulvariabler beroende på situationen är ett bra sätt att använda dem. Om val skickas till fältet utan vänliga namn än det kommer att skapa förvirring.
DecimalField
Ett decimaltal med fast precision, representerat i Python med en decimal instans. Till skillnad från IntegerField och dess derivat har detta fält 2 nödvändiga argument:
- DecimalField.max_digits : Det maximala antalet siffror som är tillåtet i antalet. Observera att detta nummer måste vara större än eller lika med decimal_platser.
- DecimalField.decimal_places : Antalet decimaler som ska lagras med antalet.
Om du vill lagra siffror upp till 99 med 3 decimaler måste du använda max_digits=5
och decimal_places=3
:
class Place(models.Model):
name = models.CharField(max_length=255)
atmospheric_pressure = models.DecimalField(max_digits=5, decimal_places=3)
BinaryField
Detta är ett specialiserat fält som används för att lagra binär data. Den accepterar bara byte . Data är bas64 seriellt vid lagring.
Eftersom detta lagrar binära data, kan detta fält inte användas i ett filter.
from django.db import models
class MyModel(models.Model):
my_binary_data = models.BinaryField()
Charfield
CharField används för att lagra definierade textlängder. I exemplet nedan kan upp till 128 tecken text lagras i fältet. Att ange en sträng längre än detta kommer att leda till att ett valideringsfel höjs.
from django.db import models
class MyModel(models.Model):
name = models.CharField(max_length=128, blank=True)
DateTimeField
DateTimeField används för att lagra datumtidsvärden.
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)
A DateTimeField
har två valfria parametrar:
auto_now_add
ställer inauto_now_add
värde till aktuell datetime när objektet skapas.auto_now
ställer inauto_now
värde till aktuell datetime varje gång fältet sparas.
Dessa alternativ och default
är ömsesidigt exklusiva.
Främmande nyckel
ForeignKey-fältet används för att skapa en many-to-one
relation mellan modeller. Inte som de flesta andra fält kräver positionsargument. Följande exempel visar bil- och ägarförhållandet:
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)
Det första argumentet i fältet är den klass som modellen är relaterad till. Det andra positionsargumentet är on_delete
argument. I de aktuella versionerna krävs detta argument inte, men det kommer att krävas i Django 2.0. Argumentets standardfunktioner visas enligt följande:
class Car(model.Model)
owner = models.ForeignKey('Person', on_delete=models.CASCADE)
...
Detta kommer att göra att bilobjekt raderas från modellen när dess ägare raderas från personmodellen. Detta är standardfunktionen.
class Car(model.Model)
owner = models.ForeignKey('Person', on_delete=models.PROTECT)
...
Detta förhindrar att personobjekt raderas om de är relaterade till minst ett bilobjekt. Alla bilobjekt som hänvisar till ett Personobjekt bör raderas först. Och sedan kan Personobjektet raderas.