Вопрос

У меня есть модель продукта

среди прочего есть два поля размера и цвета

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

На мой взгляд, у меня есть

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

и получите эту ошибку:

объект типа NoneType не имеет len()

Что такое NoneType и как его проверить?

Это было полезно?

Решение

NoneType это тип, который None значение имеет.Вы хотите изменить второй фрагмент на

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

Другие советы

NoneType — это NULL-тип Python, что означает «ничего», «неопределенное».Он имеет только одно значение:"Никто".При создании нового объекта модели его атрибуты обычно инициализируются как None, это можно проверить, сравнив:

if someobject.someattr is None:
    # Not set yet

Лучше всего я могу объяснить ошибку NoneType на этом примере ошибочного кода:

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() ничего не возвращает, также известное как NoneType.Правильный путь

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

Я не знаю Django, но предполагаю, что при этом задействован какой-то ORM:

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

На этом этапе вам всегда следует проверять, получаете ли вы обратно None («None» — то же самое, что «null» в Java или «nil» в Lisp, с той небольшой разницей, что «None» — это объект в Python).Обычно именно так ORM отображает пустой набор на языке программирования.

РЕДАКТИРОВАТЬ:Ну и дела, я просто вижу, что это current_product.size это None нет current_product.Как уже было сказано, я не знаком с ORM Django, но, тем не менее, это кажется странным:Я бы либо ожидал current_product быть None или size имеющий числовое значение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top