Django Modello NoneType ritorno
-
23-08-2019 - |
Domanda
Ho un modello prodotto
ha due campi di dimensioni e colori, tra gli altri
colours = models.CharField(blank=True, null=True, max_length=500)
size = models.CharField(blank=True, null=True, max_length=500)
A mio avviso ho
current_product = Product.objects.get(slug=title)
if len(current_product.size) != 0 :
current_product.size = current_product.size.split(",")
e ottenere questo errore:
oggetto di tipo 'NoneType' non ha len ()
Che cos'è NoneType e come posso provare per esso?
Soluzione
NoneType
è il tipo che il valore None
ha. Si desidera modificare il secondo snippet
if current_product.size: # This will evaluate as false if size is None or len(size) == 0.
blah blah
Altri suggerimenti
NoneType è Pythons NULL-Type, che significa "niente", "indefinito". Ha un solo valore: "Nessuno". Quando si crea un nuovo oggetto del modello, i suoi attributi sono normalmente inizializzati su Nessuno, è possibile verificare che confrontando:
if someobject.someattr is None:
# Not set yet
Posso spiegare meglio l'errore NoneType con questo esempio di codice errato:
def test():
s = list([1,'',2,3,4,'',5])
try:
s = s.remove('') # <-- THIS WRONG because it turns s in to a NoneType
except:
pass
print(str(s))
ritorna s.remove()
nulla conosciuto anche come NoneType. Il modo corretto
def test2()
s = list([1,'',2,3,4,'',5])
try:
s.remove('') # <-- CORRECTED
except:
pass
print(str(s))
Non so Django, ma suppongo che un qualche tipo di ORM è coinvolto quando si esegue questa:
current_product = Product.objects.get(slug=title)
A questo punto si dovrebbe sempre verificare se si ottiene Nessuno indietro ( 'Nessuno' è lo stesso di 'nulla' in Java o 'zero' in Lisp con la sottile differenza che 'Nessuno' è un oggetto in Python). Questo di solito è il modo in cui ORM mappa l'insieme vuoto al linguaggio di programmazione.
EDIT:
Accidenti, mi basta vedere che è current_product.size
che è None
non current_product
. Come detto, io non sono a conoscenza ORM di Django, ma questo sembra strano comunque: mi piacerebbe o aspetto current_product
da None
o size
avere un valore numerico