Comment stocker la valeur est vide comme une Integerfield
J'ai vu les threads, lire la doc, et j'ai essayé de nombreuses combinaisons pour stocker une valeur vide comme IntegerField
en db et a échoué à chaque fois.
Je suis de l'utilisation de MySQL.
Mon models.py
définit un age=models.IntegerField()
champ. J'remplir db à partir d'un fichier csv, et certaines cellules n'ont aucune valeur. Django docs dit:
Field.null
If True, Django will store empty values as NULL in the database. Default is False.
Note that empty string values will always get stored as empty strings, not as NULL.
Depuis que je travaille avec IntegerField
je veux une chaîne vide (une cellule vide de la csv) pour être stockées en tant que NULL
en db. Donc, je (pense) ont pour ajouter null=True
à la age
champ. En fait, j'ai essayé plus que cela:
age=models.IntegerField()
age=models.IntegerField(null=True)
age=models.IntegerField(null=True, blank=True)
age=models.IntegerField(null=True, blank=True, default=None)
et à chaque fois je suis d'insérer une chaîne vide en db j'ai eu
ValueError: invalid literal for int() with base 10: ''
Tout deviner ce que je peux faire?
OriginalL'auteur nutship | 2013-12-05
Vous devez vous connecter pour publier un commentaire.
Une chaîne de caractères n'est pas un nombre entier; et une chaîne vide n'est pas
None
ouNULL
. Ce que vous devez faire est d'attraper les cas où le champ est vide, puis il la jeta àNone
.vide
est strictement pour avant la fin de la validation; il n'a pas d'impact sur la base de données secondaires:null
sur l'autre main, de a à faire avec la base de données:Un
IntegerField
nécessite valeur qui peut être converti en un entier, de sorte que lorsque vous passez dans un chaîne vide, il ne peut pas le jeter et lève une exception. Au lieu de cela, si vous passez dansNone
, et vous avezage = models.IntegerField(null=True)
, il sait de les stocker correctement.Pour résumer:
age = models.IntegerField()
Champ est requis et les besoins d'un entier valide. Il ne sera pas accepter
None
et n'ont pas de valeurs null dans la base de données. Les valeurs valides sont de -2147483648 à 2147483647age = models.IntegerField(null=True)
Champ est requis (validation de formulaire). Si le champ a
None
comme une valeur, il sera traduit enNULL
dans la base de données.age = models.IntegerField(blank=True, null=True)
Champ n'est pas obligatoire (validation de formulaire). Si le domaine est passé en
None
, il sera traduit enNULL
age = models.IntegerField(blank=True)
Champ n'est pas obligatoire (formulaire de validation), mais un entier valide doit être passé en raison de la base de données n'accepte pas la valeur null. Typiquement ici, vous serait-il donner une valeur par défaut avec
default=0
ou avoir une validation avant l'envoi de la valeur de l'orm.mobile_no = models.BigIntegerField(max_length =10, blank=True, null=True)
. Quand il n'y a pas de numéro de téléphone indiqué, j'ai essayé en passantNone
à lamobile_no
champ. J'obtiens une erreurinvalid literal for int() with base 10: 'None'
. Où pourrais-je aller mal ?Vous êtes de passage le string
'None'
(notez les guillemets) et pas de la valeurNone
.OriginalL'auteur Burhan Khalid
Essayer de passer
None
à ce champ n'est pas vide chaîne "OriginalL'auteur ndpu
Vous pouvez remplacer "propre" de la méthode dans votre classe de formulaire, puis de nettoyer les données entières pour éviter chaîne vide pour être soumis, voir exemple ci-dessous:
OriginalL'auteur Simon Chen