null = True || blank = True || null = True && blank = True
class TestModel(models.Model):
field1 = models.CharField(max_length=100, null=True)
field2 = models.CharField(max_length=100, blank=True) # it's not a correct way
field3 = models.CharField(max_length=100, null=True, blank=True)
LES CHAMPS DE LA BASE DE DONNÉES : MySQL
CREATE TABLE TestModel (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`field1` VARCHAR(100) NULL DEFAULT NULL,
`field2` VARCHAR(100) NOT NULL,
`field3` VARCHAR(100) NULL DEFAULT NULL,
)
cas-01 : null = True
db: db field is accepts null value
form: form field is `required`
NB: DB IS ACCEPTS NULL VALUE, BUT FORM FIELD IS REQUIRED. SO FORM IS
SUBMITTED WHEN THIS FIELD HAVE SOME VALUE. it's good.
cas-02 : blank = True
db: db field is not accepts null value
form: form field is `optional`
NB: FORM IS VALID WITHOUT ANY VALUE, BUT DB IS NOT ACCEPTS NULL VALUE.
SO THE FORM IS SUBMITTED WITHOUT ANY VALUE THEN BOOM. it's worst.
cas-03 : null = True && blank = True
db: db field is accepts null value
form: form field is `optional`
NB: HERE FORM FIELD IS OPTIONAL & FORM IS VALID WITHOUT ANY VALUE
& DB ALSO ACCEPTS NULL VALUE. SO, IT'S BEST TO USE `null=True && blank=True`
:)
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