Djangoのモデル帰国NoneType
-
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
他のヒント
NoneTypeは "未定義"、 "何を" を意味しない、ニシキヘビNULL型です。 「なし」:それは、1つの値のみを持っています。新しいモデルのオブジェクトを作成する場合、その属性は通常、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を取得しないかどうかを確認する必要があります( 'なしのJavaの「ヌル」または「なし」はPythonではオブジェクトではないことを微妙な違いを持つLispでは「nil」のと同じではありません)。これは通常のORMは、プログラミング言語に空のセットをマッピングする方法です。
編集の
うわあ、私はちょうどそれがcurrent_product.size
ないNone
だcurrent_product
だことがわかります。言ったように、私は、DjangoのORMに慣れていないんだけど、これはそれにもかかわらず、奇妙なようだ:私はcurrent_product
が数値を持つNone
かsize
ことを期待したいのいずれか