Pregunta

Tengo un producto modelo

tiene dos campos tamaño y colores entre otros

colours = models.CharField(blank=True, null=True, max_length=500)
size = models.CharField(blank=True, null=True, max_length=500)

En mi opinión tengo

current_product = Product.objects.get(slug=title)
if len(current_product.size) != 0 :
    current_product.size = current_product.size.split(",")

y obtiene este error:

objeto de tipo 'NoneType' no tiene len()

¿Qué es NoneType y cómo puedo probarlo?

¿Fue útil?

Solución

NoneType es el tipo que el valor None tiene. ¿Quieres cambiar el segundo fragmento a

if current_product.size: # This will evaluate as false if size is None or len(size) == 0.
  blah blah

Otros consejos

NoneType es pitones NULL-Type, que significa "nada", "indefinido". Sólo tiene un valor de: "Ninguno". Al crear un nuevo modelo de objetos, sus atributos son generalmente inicializan en Ninguno, se puede comprobar que mediante la comparación:

if someobject.someattr is None:
    # Not set yet

Puedo explicar mejor el error NoneType con este ejemplo de código erróneo:

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() no devuelve nada, también conocido como NoneType.la manera correcta

def test2()  
    s = list([1,'',2,3,4,'',5])  
    try:  
        s.remove('') # <-- CORRECTED  
    except:  
        pass  
    print(str(s))  

No sé Django, pero supongo que algún tipo de ORM está involucrado al hacer esto:

current_product = Product.objects.get(slug=title)

En ese momento siempre se debe comprobar si se obtiene Ninguna parte de atrás ( 'Nada' es lo mismo que 'nulo' en Java o las negativas en Lisp con la diferencia sutil que 'Ninguno' es un objeto en Python). Esta suele ser la forma ORM mapa el conjunto vacío al lenguaje de programación.

EDIT: Vaya, acabo de ver que es current_product.size que es None no current_product. Como se ha dicho, no estoy familiarizado con ORM de Django, pero esto parece extraño, sin embargo: Yo tampoco esperaba current_product que se None o size tener un valor numérico

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top