Voici comment l'ORM fait correspondre blank
& null
champs pour Django 1.8
class Test(models.Model):
charNull = models.CharField(max_length=10, null=True)
charBlank = models.CharField(max_length=10, blank=True)
charNullBlank = models.CharField(max_length=10, null=True, blank=True)
intNull = models.IntegerField(null=True)
intBlank = models.IntegerField(blank=True)
intNullBlank = models.IntegerField(null=True, blank=True)
dateNull = models.DateTimeField(null=True)
dateBlank = models.DateTimeField(blank=True)
dateNullBlank = models.DateTimeField(null=True, blank=True)
Les champs de la base de données créés pour PostgreSQL 9.4 sont :
CREATE TABLE Test (
id serial NOT NULL,
"charNull" character varying(10),
"charBlank" character varying(10) NOT NULL,
"charNullBlank" character varying(10),
"intNull" integer,
"intBlank" integer NOT NULL,
"intNullBlank" integer,
"dateNull" timestamp with time zone,
"dateBlank" timestamp with time zone NOT NULL,
"dateNullBlank" timestamp with time zone,
CONSTRAINT Test_pkey PRIMARY KEY (id)
)
Les champs de la base de données créés pour MySQL 5.6 sont :
CREATE TABLE Test (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`charNull` VARCHAR(10) NULL DEFAULT NULL,
`charBlank` VARCHAR(10) NOT NULL,
`charNullBlank` VARCHAR(10) NULL DEFAULT NULL,
`intNull` INT(11) NULL DEFAULT NULL,
`intBlank` INT(11) NOT NULL,
`intNullBlank` INT(11) NULL DEFAULT NULL,
`dateNull` DATETIME NULL DEFAULT NULL,
`dateBlank` DATETIME NOT NULL,
`dateNullBlank` DATETIME NULL DEFAULT NULL
)
12 votes
Vous avez de belles réponses à ce sujet ici : stackoverflow.com/questions/8159310/ et ici : stackoverflow.com/questions/4384098/
4 votes
Bonne lecture : b-list.org/weblog/2006/jun/28/
0 votes
Oui, j'ai aussi ce cas d'utilisation avec
ForeignKey
conblank=True
mais sansnull=True
. Lorsque le modèle est enregistré, je veux le "publier" automatiquement en créant une entrée publiée à partir de celui-ci. Je ne peux donc pas sauvegardernull
dans la base de données, car chaque modèle doit être "publié", mais je veux pouvoir laisser le champ vide dans l'administration.0 votes
Je pense que vous pourriez être intéressé par [ Enregistrer les CharFields vides et invalidables comme nuls plutôt que comme une chaîne vide]( code.djangoproject.com/ticket/4136 ). Il existe de nombreuses discussions à ce sujet, et un problème très pratique que vous pouvez rencontrer (par exemple, vous voulez ajouter une url openid pour chaque utilisateur qui peut être nulle et doit être unique).
0 votes
Évitez d'utiliser null pour les champs basés sur des chaînes de caractères, tels que CharField et TextField. docs.djangoproject.com/fr/3.1/ref/models/fields