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 por default 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 por default 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:

  1. 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.
  2. 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.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow