Django 모델을 반환하는 비에 타이프
-
23-08-2019 - |
문제
모델 제품이 있습니다
두 개의 필드 크기와 색상이 있습니다
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
다른 팁
비에 타이프는 Pythons Null 유형으로 "아무것도", "정의되지 않은"것을 의미합니다. "없음"이 하나뿐입니다. 새 모델 객체를 만들 때, 그 속성은 일반적으로 없음으로 초기화되므로 다음을 비교하여 확인할 수 있습니다.
if someobject.someattr is None:
# Not set yet
이 예제의 잘못된 코드에 대한 비에 타이프 오류를 가장 잘 설명 할 수 있습니다.
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'이 파이썬의 물체라는 미묘한 차이로 LISP의 'null'과 동일합니다). 이것은 일반적으로 Orms가 빈 세트를 프로그래밍 언어에 매핑하는 방식입니다.
편집하다:이런, 난 그냥 봅니다 current_product.size
그게 None
~ 아니다 current_product
. 말했듯이, 나는 Django의 ORM에 익숙하지 않지만 이것은 이상하게 보입니다. current_product
되려고 None
또는 size
수치 값이 있습니다.