usuario1
Tengo el siguiente código:
subject = models.ForeignKey(subjects)
location = models.ForeignKey(location)
publisher = models.ForeignKey(publisher)
Es posible que no tenga los tres valores de los libros. A veces puede que no conozca el tema, la ubicación o la editorial. En este caso quiero dejarlos vacíos.
Pero si existen valores, entonces necesito un cuadro de selección desde el cual seleccionarlos. es posible?
Cumplir con un
Claro, solo agrega blank=True, null=True
para cada campo que desee que siga siendo opcional, como
subject = models.ForeignKey(subjects, blank=True, null=True)
-
¿Se necesitan ambos? ¿Cuáles serían las desventajas de simplemente usar null=True?
– Pabellón
21 de enero de 2016 a las 8:15
-
@WardC La combinación de los dos es tan frecuente porque, por lo general, si va a permitir que un campo esté en blanco en su formulario, también necesitará que su base de datos permita valores NULL para ese campo. La excepción son CharFields y TextFields, que en Django nunca se guardan como NULL. Los valores en blanco se almacenan en la base de datos como una cadena vacía (”).
– fang_dejavu
20 de junio de 2016 a las 18:32
-
@Ward, ambos no son necesarios. Es suficiente usar solo
null=True
.– Arcilla Risser
20 mayo 2017 a las 22:27
-
blank=True
es importante para la validación de formularios. Permitirá una cadena vacía como entrada de usuario en este campo.null=True
permitirá NULO valor en la columna de la base de datos.– cézar
23 de agosto de 2018 a las 10:31
-
¿Se requiere algo más si originalmente no tenía
blank=True, null=True
pero que hacer ahora con las migraciones aplicadas? Tengo esta situación y aunque el esquema se ve bien, el formulario de administración no permite espacios en blanco. Sin embargo, otros FK que permitían espacios en blanco originalmente funcionaban y no veo la diferencia.– JFlo
9 oct 2018 a las 13:59
muhammad zubair
Para lograr esto, el on_delete
el argumento es necesario junto con blank=True
y null=True
y sería mejor si lo haces de esta manera.
subject = models.ForeignKey(subjects, on_delete=models.SET_NULL, blank=True, null=True)
Necesitas configurar en blanco = verdadero y nulo=Verdadero a modelos.ForeignKey() para hacer que el campo de clave foránea sea opcional y on_delete también debe configurarse como se muestra a continuación:
my_field = models.ForeignKey(
Parent_model,
blank=True, # Here
null=True, # Here
on_delete=models.CASCADE # Here
)
*Tenga cuidado, solo configure cualquiera de los dos blank=True
o null=True
a models.ForeignKey()
no es suficiente para que el campo de clave externa sea opcional, por lo que debe configurar ambos.
Además, si quieres conseguir lo que quieres con modelos.OneToOneField()debe establecer los mismos argumentos que se muestran a continuación:
my_field = models.OneToOneField(
Parent_model,
blank=True, # Here
null=True, # Here
on_delete=models.CASCADE # Here
)