Ich habe alle ähnlichen Threads gesehen, die Dokumente gelesen und viele Kombinationen versucht, um einen leeren Wert als IntegerField in db zu speichern, und bin jedes Mal fehlgeschlagen.

Ich benutze MySQL.

Mein models.py definiert ein age=models.IntegerField() Feld. Ich fülle Datenbank aus CSV-Datei, und einige Zellen haben keinen Wert. Django docs sagt:

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. 

Da ich mit IntegerField arbeite, möchte ich, dass eine leere Zeichenfolge (eine leere Zelle aus dem CSV) als NULL in db gespeichert wird. Daher muss ich (denke) null=True zum Feld age hinzufügen. Eigentlich habe ich mehr als das versucht:

age=models.IntegerField()
age=models.IntegerField(null=True)
age=models.IntegerField(null=True, blank=True)
age=models.IntegerField(null=True, blank=True, default=None)

Und jedes Mal, wenn ich eine leere Zeichenfolge in eine Datenbank einfüge, habe ich

ValueError: invalid literal for int() with base 10: ''

Ratet mal, was ich sonst noch tun kann?

24
nutship 5 Dez. 2013 im 16:12

2 Antworten

Versuchen Sie, None an dieses Feld zu übergeben, nicht leere Zeichenfolge ''

3
ndpu 5 Dez. 2013 im 12:15

Sie können die 'clean'-Methode in Ihrer Formularklasse überschreiben und dann die Ganzzahldaten bereinigen, um zu vermeiden, dass leere Zeichenfolgen gesendet werden. Siehe Beispiel unten:

def clean(self):
    self.cleaned_data = super(YourForm, self).clean()
    if self.cleaned_data['age'] == '': self.cleaned_data['age'] = None
    return self.cleaned_data
0
Simon Chen 9 Nov. 2018 im 05:12