Django modelo retornando NoneType
-
23-08-2019 - |
Pergunta
Eu tenho um modelo de produto
tem dois campos de tamanho e cores, entre outros
colours = models.CharField(blank=True, null=True, max_length=500)
size = models.CharField(blank=True, null=True, max_length=500)
No meu ponto de vista eu tenho
current_product = Product.objects.get(slug=title)
if len(current_product.size) != 0 :
current_product.size = current_product.size.split(",")
e obter este erro:
objeto do tipo 'NoneType' não tem len ()
O que é NoneType e como posso testar para ele?
Solução
NoneType
é o tipo que o valor None
tem. Você quer mudar o segundo trecho para
if current_product.size: # This will evaluate as false if size is None or len(size) == 0.
blah blah
Outras dicas
NoneType é Pythons NULL-Type, que significa "nada", "indefinido". Ele tem apenas um valor: "Nenhum". Ao criar um novo modelo de objeto, seus atributos são geralmente inicializado para Nenhum, é possível verificar que, comparando:
if someobject.someattr is None:
# Not set yet
Eu posso explicar melhor o erro NoneType com este exemplo de código errônea:
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))
s.remove()
retornos nada também conhecido como NoneType. A maneira correta ??p>
def test2()
s = list([1,'',2,3,4,'',5])
try:
s.remove('') # <-- CORRECTED
except:
pass
print(str(s))
Eu não sei Django, mas eu suponho que algum tipo de ORM está envolvido quando você faz isso:
current_product = Product.objects.get(slug=title)
Nesse ponto, você deve sempre verificar se você tem Nenhum volta ( 'Nenhum' é o mesmo que 'nulo' em Java ou 'nulo' em Lisp com a sutil diferença que 'Nenhum' é um objeto em Python). Esta é geralmente a maneira ORMs mapear o conjunto vazio para a linguagem de programação.
EDIT:
Gee, eu só ver que é current_product.size
Isso não None
current_product
. Como disse, eu não estou familiarizado com ORM do Django, mas isso parece estranho, no entanto: eu quer esperar current_product
ser None
ou size
ter um valor numérico