اذهب إلى المحتوى

السؤال

نشر

طوال الوقت في جانغو Django، أرى أنه يتم إستخدام الصنف DoesNotExist في حالة عدم وجود نتائج، ولكن في بعض الأحيان قد يتم إستخدام الصنف ObjectDoesNotExist الموجود في django.core.exceptions بدلًا منه.

متى أستخدام الصنف ObjectDoesNotExist بدلًا DoesNotExist؟ ومتى أقوم بالعكس؟

Recommended Posts

  • 1
نشر

DoesNotExist و ObjectDoesNotExist  هما عبارة عن أخطاء (exceptions) في جانغو تحدث عندما نريد جلب كائن من قاعدة البيانات لكن هذا الكائن غير متوفر إما لأنه حُذف أو لأن المُعرف الذي استخدمناه كان خاطئاً.

في فرق بسيط بينهما وهو أن ObjectDoesNotExist عامة و DoesNotExist خاصة. لفهم هذا نقوم بالمثال التالي:

from django.contrib.auth.models import User
from django.core.exceptions import ObjectDoesNotExist
from myproject.apps.teams.models import Team

try:
    user = User.objects.get(pk=1337)
    team = Team.objects.get(pk=23)
except ObjectDoesNotExist:
    logging.error("المستخدم أو الفريق لا يوجد")

في المثال السابق قُمنا بجلب كائن من النموذج User باستخدام المعرف 1337، و كائن من النموذج Team باستخدام المعرف 23.

لو صودف أن أحد الكائنين غير متوفر سيحدث الخطأ ObjectDoesNotExist.

لو أردنا أن نَفْصِل بين الخطأين مثلاً:  عندما لا نجد المستخدم نسجل "المستخدم لا يوجد" وعندما لا نجد الفريق نكتب " الفريق لا يوجد" هنا لا نستطيع فعل ذلك باستخدام ObjectDoesNotExist فنستعمل DoesNotExist.

from django.contrib.auth.models import User
from myproject.apps.teams.models import Team

try:
    user = User.objects.get(pk=1337)
    team = Team.objects.get(pk=23)
except User.DoesNotExist:
    logging.error("المستخدم غير موجود")
except Team.DoesNotExist:
    logging.error("الفريق غير موجود")

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...