Django
Référence du champ du modèle
Recherche…
Paramètres
Paramètre | Détails |
---|---|
nul | Si true, les valeurs vides peuvent être stockées comme null dans la base de données |
blanc | Si cela est vrai, le champ ne sera pas requis dans les formulaires. Si les champs sont laissés en blanc, Django utilisera la valeur du champ par défaut. |
les choix | Une itération d'itérables à 2 éléments à utiliser comme choix pour ce champ. Si défini, le champ est rendu sous la forme d'une liste déroulante dans l'administrateur. [('m', 'Male'),('f','Female'),('z','Prefer Not to Disclose')] . Pour regrouper les options, imbriquer simplement les valeurs: [('Video Source',((1,'YouTube'),(2,'Facebook')),('Audio Source',((3, 'Soundcloud'),(4, 'Spotify'))] |
db_column | Par défaut, django utilise le nom du champ pour la colonne de la base de données. Utilisez ceci pour fournir un nom personnalisé |
db_index | Si True , un index sera créé sur ce champ dans la base de données |
db_tablespace | Le tablespace à utiliser pour l'index de ce champ. Ce champ est utilisé uniquement si le moteur de base de données le prend en charge, sinon il est ignoré . |
défaut | La valeur par défaut pour ce champ. Peut être une valeur ou un objet appelable. Pour les valeurs par défaut mutables (une liste, un ensemble, un dictionnaire), vous devez utiliser un appelable. En raison de la compatibilité avec les migrations, vous ne pouvez pas utiliser lambdas. |
modifiable | Si la valeur est False , le champ n'est pas affiché dans l'administrateur du modèle ni dans ModelForm . La valeur par défaut est True . |
messages d'erreur | Utilisé pour personnaliser les messages d'erreur par défaut affichés pour ce champ. La valeur est un dictionnaire, les clés représentant l'erreur et la valeur étant le message. Les clés par défaut (pour les messages d'erreur) sont null , blank , invalid , invalid_choice , unique et unique_for_date ; des messages d'erreur supplémentaires peuvent être définis par des champs personnalisés. |
Texte d'aide | Texte à afficher avec le champ, pour aider les utilisateurs. HTML est autorisé. |
on_delete | Lorsqu'un objet référencé par une ForeignKey est supprimé, Django émule le comportement de la contrainte SQL spécifiée par l'argument on_delete. C'est le deuxième argument de position pour les champs ForeignKey et OneToOneField . D'autres champs n'ont pas cet argument. |
clé primaire | Si True , ce champ sera la clé primaire. Django ajoute automatiquement une clé primaire; il n'est donc nécessaire que si vous souhaitez créer une clé primaire personnalisée. Vous ne pouvez avoir qu'une seule clé primaire par modèle. |
unique | Si la valeur est True , des erreurs sont générées si des valeurs en double sont entrées pour ce champ. Ceci est une restriction au niveau de la base de données et pas simplement un bloc d'interface utilisateur. |
unique_pour_date | Définissez la valeur sur un DateField ou un DateTimeField , et des erreurs seront DateField s'il existe des valeurs en double pour la même date ou l'heure de la date . |
unique_pour_mois | Semblable à unique_for_date , sauf que les chèques sont limités pour le mois. |
unique_pour_année | Similaire à unique_for_date , sauf que les chèques sont limités à l'année. |
verbose_name | Un nom convivial pour le champ, utilisé par django à divers endroits (comme la création d'étiquettes dans les formulaires d'administration et de modèle). |
validateurs | Une liste de validateurs pour ce champ. |
Remarques
- Vous pouvez écrire vos propres champs si vous le trouvez nécessaire
- Vous pouvez remplacer les fonctions de la classe du modèle de base, le plus souvent la fonction
save()
Champs numériques
Des exemples de champs numériques sont donnés:
AutoField
Un entier auto-incrémenté généralement utilisé pour les clés primaires.
from django.db import models
class MyModel(models.Model):
pk = models.AutoField()
Chaque modèle obtient un champ de clé primaire (appelé
id
) par défaut. Par conséquent, il n'est pas nécessaire de dupliquer un champ id dans le modèle pour les besoins d'une clé primaire.
BigIntegerField
Un nombre entier convenable de -9223372036854775808
à 9223372036854775807
( 8 Bytes
).
from django.db import models
class MyModel(models.Model):
number_of_seconds = models.BigIntegerField()
IntegerField
IntegerField permet de stocker des valeurs entières comprises entre -2147483648 et 2147483647 ( 4 Bytes
).
from django.db import models
class Food(models.Model):
name = models.CharField(max_length=255)
calorie = models.IntegerField(default=0)
default
paramètredefault
n'est pas obligatoire. Mais il est utile de définir une valeur par défaut.
PositiveIntegerField
Comme un IntegerField, mais doit être positif ou nul (0). Le PositiveIntegerField est utilisé pour stocker des valeurs entières comprises entre 0 et 2147483647 ( 4 Bytes
). Cela peut être utile sur le terrain, ce qui devrait être sémantiquement positif. Par exemple, si vous enregistrez des aliments avec ses calories, elles ne devraient pas être négatives. Ce champ empêchera les valeurs négatives via ses validations.
from django.db import models
class Food(models.Model):
name = models.CharField(max_length=255)
calorie = models.PositiveIntegerField(default=0)
default
paramètredefault
n'est pas obligatoire. Mais il est utile de définir une valeur par défaut.
SmallIntegerField
SmallIntegerField permet de stocker des valeurs entières comprises entre -32768 et 32767 ( 2 Bytes
). Ce champ est utile pour les valeurs qui ne sont pas extrêmes.
from django.db import models
class Place(models.Model):
name = models.CharField(max_length=255)
temperature = models.SmallIntegerField(null=True)
PositiveSmallIntegerField
SmallIntegerField permet de stocker des valeurs entières comprises entre 0 et 32767 ( 2 Bytes
). Tout comme SmallIntegerField, ce champ est utile pour les valeurs qui ne vont pas aussi haut et devrait être sémantiquement positif. Par exemple, il peut stocker l'âge qui ne peut être négatif.
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)
Outre que PositiveSmallIntegerField est utile pour les choix, il s’agit de la façon dont Django a implémenté 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
)
...
La définition des choix en tant que variables de classe ou variables de module en fonction de la situation est un bon moyen de les utiliser. Si des choix sont passés au champ sans noms conviviaux, cela créera une confusion.
DecimalField
Un nombre décimal à précision fixe, représenté dans Python par une instance Decimal. Contrairement à IntegerField et ses dérivés, ce champ a 2 arguments obligatoires:
- DecimalField.max_digits : nombre maximal de chiffres autorisé dans le nombre. Notez que ce nombre doit être supérieur ou égal à decimal_places.
- DecimalField.decimal_places : nombre de décimales à stocker avec le nombre.
Si vous voulez stocker des nombres jusqu’à 99 avec 3 décimales, vous devez utiliser max_digits=5
et decimal_places=3
:
class Place(models.Model):
name = models.CharField(max_length=255)
atmospheric_pressure = models.DecimalField(max_digits=5, decimal_places=3)
BinaryField
Ceci est un champ spécialisé, utilisé pour stocker des données binaires. Il accepte uniquement les octets . Les données sont sérialisées en base64 lors du stockage.
Comme cela stocke des données binaires, ce champ ne peut pas être utilisé dans un filtre.
from django.db import models
class MyModel(models.Model):
my_binary_data = models.BinaryField()
CharField
Le CharField est utilisé pour stocker des longueurs de texte définies. Dans l'exemple ci-dessous, jusqu'à 128 caractères de texte peuvent être stockés dans le champ. L'entrée d'une chaîne plus longue entraînera une erreur de validation.
from django.db import models
class MyModel(models.Model):
name = models.CharField(max_length=128, blank=True)
DateTimeField
DateTimeField est utilisé pour stocker les valeurs de date et heure.
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)
Un DateTimeField
a deux paramètres facultatifs:
auto_now_add
définit la valeur du champ sur la date / heure actuelle lors de la création de l'objet.auto_now
définit la valeur du champ sur la date / heure actuelle chaque fois que le champ est enregistré.
Ces options et le paramètre default
sont mutuellement exclusifs.
Clé étrangère
Le champ ForeignKey est utilisé pour créer une relation many-to-one
entre les modèles. Pas comme la plupart des autres champs nécessite des arguments de position. L'exemple suivant illustre la relation entre la voiture et le propriétaire:
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)
Le premier argument du champ est la classe à laquelle le modèle est lié. Le deuxième argument positionnel est l'argument on_delete
. Dans les versions actuelles, cet argument n'est pas requis, mais il sera requis dans Django 2.0. La fonctionnalité par défaut de l'argument est affichée comme suit:
class Car(model.Model)
owner = models.ForeignKey('Person', on_delete=models.CASCADE)
...
Cela entraînera la suppression des objets Car du modèle lorsque son propriétaire a supprimé du modèle Personne. C'est la fonctionnalité par défaut.
class Car(model.Model)
owner = models.ForeignKey('Person', on_delete=models.PROTECT)
...
Cela empêchera la suppression des objets Personne s'ils sont liés à au moins un objet Car. Tous les objets Car qui font référence à un objet Personne doivent être supprimés en premier. Et puis l'objet Personne peut être supprimé.