نموذج 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" ليس له لين ()
ما هو nonetype وكيف يمكنني اختبار لذلك؟
المحلول
NoneType
هو النوع الذي None
القيمة لديها. تريد تغيير المقتطف الثاني إلى
if current_product.size: # This will evaluate as false if size is None or len(size) == 0.
blah blah
نصائح أخرى
nonetepe هو pythons null-type، وهذا يعني "لا شيء"، "undefined". لديها قيمة واحدة فقط: "لا شيء". عند إنشاء كائن نموذج جديد، يتم تهيئة سماتها عادة إلى لا شيء، يمكنك التحقق من ذلك بمقارنة:
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)
عند هذه النقطة، يجب عليك دائما التحقق مما إذا كنت لا تحصل على أي شيء ("لا شيء" هو نفسه "NULL" في جافا أو "Nil" في Lisp مع الفرق الدقيق الذي "لا شيء" كائن في بيثون). عادة ما يكون هذا هو الطريقة التي تعرض بها أورامز المحددة الفارغة إلى لغة البرمجة.
تعديل:جي، أنا فقط أرى أنه current_product.size
هذا None
ليس current_product
. وبعد كما قيل، أنا لست على دراية بالشرج Django، ولكن هذا يبدو غريبا مع ذلك: سأتوقع current_product
أن تكون None
أو size
وجود قيمة رقمية.