Django
Modelo de referencia de campo
Buscar..
Parámetros
Parámetro | Detalles |
---|---|
nulo | Si es verdadero, los valores vacíos pueden almacenarse como null en la base de datos |
blanco | Si es verdadero, entonces el campo no será requerido en los formularios. Si los campos se dejan en blanco, Django usará el valor de campo predeterminado. |
elecciones | Se puede utilizar un iterable de iterables de 2 elementos como opciones para este campo. Si se establece, el campo se representa como un menú desplegable en el administrador. [('m', 'Male'),('f','Female'),('z','Prefer Not to Disclose')] . Para agrupar opciones, simplemente anide los valores: [('Video Source',((1,'YouTube'),(2,'Facebook')),('Audio Source',((3, 'Soundcloud'),(4, 'Spotify'))] |
db_column | Por defecto, django usa el nombre del campo para la columna de la base de datos. Use esto para proporcionar un nombre personalizado |
db_index | Si es True , se creará un índice en este campo en la base de datos. |
db_tablespace | El espacio de tabla a usar para el índice de este campo. Este campo solo se usa si el motor de la base de datos lo admite, de lo contrario se ignora . |
defecto | El valor predeterminado para este campo. Puede ser un valor, o un objeto llamable. Para los valores predeterminados mutables (una lista, un conjunto, un diccionario), debe utilizar un llamador. Debido a la compatibilidad con las migraciones, no puede utilizar lambdas. |
editable | Si es False , el campo no se muestra en el administrador del modelo o en cualquier ModelForm . El valor predeterminado es True |
error de mensajes | Se utiliza para personalizar los mensajes de error predeterminados que se muestran para este campo. El valor es un diccionario, con las claves que representan el error y el valor es el mensaje. Las claves predeterminadas (para los mensajes de error) son null , en blank , invalid , invalid_choice , unique y unique_for_date ; los mensajes de error adicionales se pueden definir por campos personalizados. |
texto de ayuda | Texto que se mostrará con el campo, para ayudar a los usuarios. HTML está permitido. |
on_delete | Cuando se elimina un objeto al que hace referencia ForeignKey, Django emula el comportamiento de la restricción de SQL especificada por el argumento on_delete. Este es el segundo argumento posicional para los campos ForeignKey y OneToOneField . Otros campos no tienen este argumento. |
Clave primaria | Si es True , este campo será la clave principal. Django agrega automáticamente una clave principal; por lo tanto, esto solo es necesario si desea crear una clave principal personalizada. Sólo puede tener una clave principal por modelo. |
único | Si es True , se True errores si se ingresan valores duplicados para este campo. Esta es una restricción de nivel de base de datos, y no simplemente un bloque de interfaz de usuario. |
unique_for_date | Establezca el valor en un DateField o DateTimeField , y se generarán errores si hay valores duplicados para la misma fecha o fecha . |
unique_for_month | Similar a unique_for_date , excepto que los cheques están limitados para el mes. |
unique_for_year | Similar a unique_for_date , excepto que los cheques están limitados al año. |
verbose_name | Un nombre descriptivo para el campo, utilizado por django en varios lugares (como crear etiquetas en los formularios de administrador y modelo). |
validadores | Una lista de validadores para este campo. |
Observaciones
- Puede escribir sus propios campos si lo considera necesario.
- Puede anular las funciones de la clase del modelo base, más comúnmente la función
save()
Campos de números
Se dan ejemplos de campos numéricos:
AutoField
Un entero auto-incremental generalmente usado para claves primarias.
from django.db import models
class MyModel(models.Model):
pk = models.AutoField()
Cada modelo obtiene un campo de clave principal (llamado
id
) de forma predeterminada. Por lo tanto, no es necesario duplicar un campo de identificación en el modelo para los fines de una clave principal.
BigIntegerField
Un número entero de ajuste de -9223372036854775808
a 9223372036854775807
( 8 Bytes
).
from django.db import models
class MyModel(models.Model):
number_of_seconds = models.BigIntegerField()
Campo integral
IntegerField se utiliza para almacenar valores enteros desde -2147483648 hasta 2147483647 ( 4 Bytes
).
from django.db import models
class Food(models.Model):
name = models.CharField(max_length=255)
calorie = models.IntegerField(default=0)
default
parámetro pordefault
no es obligatorio. Pero es útil establecer un valor predeterminado.
PositiveIntegerField
Como un campo Integer, pero debe ser positivo o cero (0). El PositiveIntegerField se utiliza para almacenar valores enteros de 0 a 2147483647 ( 4 Bytes
). Esto puede ser útil en un campo que debería ser semánticamente positivo. Por ejemplo, si está registrando alimentos con sus calorías, no debería ser negativo. Este campo evitará valores negativos a través de sus validaciones.
from django.db import models
class Food(models.Model):
name = models.CharField(max_length=255)
calorie = models.PositiveIntegerField(default=0)
default
parámetro pordefault
no es obligatorio. Pero es útil establecer un valor predeterminado.
SmallIntegerField
SmallIntegerField se utiliza para almacenar valores enteros de -32768 a 32767 ( 2 Bytes
). Este campo es útil para que los valores no sean extremos.
from django.db import models
class Place(models.Model):
name = models.CharField(max_length=255)
temperature = models.SmallIntegerField(null=True)
PositiveSmallIntegerField
SmallIntegerField se utiliza para almacenar valores enteros de 0 a 32767 ( 2 Bytes
). Al igual que SmallIntegerField, este campo es útil para valores que no son tan altos y debería ser semánticamente positivo. Por ejemplo, puede almacenar la edad que no puede ser negativa.
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)
Además de PositiveSmallIntegerField es útil para las opciones, esta es la forma Djangoic de implementar 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 definición de las opciones como variables de clase o variables de módulo según la situación es una buena manera de usarlas. Si se pasan opciones al campo sin nombres amistosos, se creará confusión.
Campo decimal
Un número decimal de precisión fija, representado en Python por una instancia decimal. A diferencia de IntegerField y sus derivados, este campo tiene 2 argumentos requeridos:
- DecimalField.max_digits : el número máximo de dígitos permitido en el número. Tenga en cuenta que este número debe ser mayor o igual que decimal_places.
- DecimalField.decimal_places : El número de lugares decimales para almacenar con el número.
Si desea almacenar números de hasta 99 con 3 lugares decimales necesita usar max_digits=5
y decimal_places=3
:
class Place(models.Model):
name = models.CharField(max_length=255)
atmospheric_pressure = models.DecimalField(max_digits=5, decimal_places=3)
Campo binario
Este es un campo especializado, utilizado para almacenar datos binarios. Solo acepta bytes . Los datos son base64 serializados en el almacenamiento.
Como esto es almacenar datos binarios, este campo no se puede usar en un filtro.
from django.db import models
class MyModel(models.Model):
my_binary_data = models.BinaryField()
Campo de golf
CharField se utiliza para almacenar longitudes de texto definidas. En el siguiente ejemplo, se pueden almacenar hasta 128 caracteres de texto en el campo. Si ingresa una cadena más larga que esto, se generará un error de validación.
from django.db import models
class MyModel(models.Model):
name = models.CharField(max_length=128, blank=True)
DateTimeField
DateTimeField se utiliza para almacenar valores de fecha y hora.
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
tiene dos parámetros opcionales:
auto_now_add
establece el valor del campo en la fecha y hora actual cuando se crea el objeto.auto_now
establece el valor del campo en la fecha y hora actual cada vez que se guarda el campo.
Estas opciones y el parámetro default
se excluyen mutuamente.
Clave externa
El campo ForeignKey se utiliza para crear una relación de many-to-one
entre los modelos. No como la mayoría de los otros campos requiere argumentos posicionales. El siguiente ejemplo demuestra la relación de automóvil y propietario:
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)
El primer argumento del campo es la clase con la que se relaciona el modelo. El segundo argumento posicional es el argumento on_delete
. En las versiones actuales, este argumento no es necesario, pero será necesario en Django 2.0. La funcionalidad predeterminada del argumento se muestra a continuación:
class Car(model.Model)
owner = models.ForeignKey('Person', on_delete=models.CASCADE)
...
Esto provocará que los objetos de automóvil se eliminen del modelo cuando su propietario se elimine del modelo de persona. Esta es la funcionalidad por defecto.
class Car(model.Model)
owner = models.ForeignKey('Person', on_delete=models.PROTECT)
...
Esto evitará que los objetos Person se eliminen si están relacionados con al menos un objeto Car. Todos los objetos de Car que hacen referencia a un objeto de Persona deben eliminarse primero. Y luego el objeto de persona puede ser eliminado.