2012-07-05 13 views
38

Estoy tratando de implementar un sitio web de tareas pendientes para practicar el uso de Django. En models.py, tengo una clase llamada Item para representar un elemento de tarea. En él, tengo la siguiente línea:¿Cómo hacer que DateTimeField de Django sea opcional?

due_date = models.DateTimeField(required=False) 

DUE_DATE está destinado a ser un campo opcional en caso de que el usuario tiene una fecha límite para alguna tarea pendiente. El problema es que la línea anterior me da un TypeError debido a un argumento de palabra clave inesperado 'required'.

Parece que no puedo usar el argumento de palabra clave 'required' para DateTimeField. ¿Hay alguna forma de que pueda hacer que DateTimeField sea opcional? ¿O hay una implementación estándar para el problema que estoy teniendo?

+4

'required' es solo para campos * form *. Los campos de modelo usan 'blank = True', que debe combinarse con' null = True' para 'DateTimeField' para permitir que se almacene un valor NULL para la columna en la base de datos. De lo contrario, obtendría un 'IntegrityError'. –

Respuesta

63

"obligatorio" es un argumento válido para los formularios de Django. Para los modelos, desea la palabra clave args blank=True (para el administrador) y null=True (para la base de datos).

+1

Ah, así que confundí formas y modelos. Oops. –

+1

Gracias por explicar la diferencia entre 'required',' blank', y 'null'. – aero

+0

IIRC 'blank = True, null = True' no se recomienda para los campos de texto porque entonces puede tener dos" nulos ":' '' 'y' NULL', pero ¿eso no se aplica para el campo de tipo fecha? –

21

Uso due_date = models.DateTimeField(null=True, blank=True)

Comprobar Field Options para más información.

+0

¿Necesitamos agregar 'required = False' también, o son estos dos suficientes? ¿Alguna diferencia si lo agregamos o no? – jeff

+1

@halilpazarlama No necesita 'required = False' en su campo de modelo y ni siquiera es un argumento de palabra clave válido en una definición de campo modelo. 'required = *' se puede usar en los campos de formulario y todavía no será necesario si ya tiene 'blank = True' en la definición de campo de su modelo. – machaku

+0

Oh. Debería haber leído las otras respuestas más a fondo. Gracias :) :) – jeff

Cuestiones relacionadas