Amer Abdallah نشر 5 سبتمبر 2021 أرسل تقرير نشر 5 سبتمبر 2021 عندما أطلب من نموذج الحصول على كائن معين، فإنه يظهر خطأ DoesNotExist عندما لا يكون هناك كائن مطابق. writers = User.objects.get(role="writer") # DoesNotExist بدلاً من ظهور خطأ DoesNotExist، كيف يمكنني أن أجبره على إعاده None بدلاً من ذلك في حالة عدم وجود الكائن؟ 2 اقتباس
1 سامح أشرف نشر 5 سبتمبر 2021 أرسل تقرير نشر 5 سبتمبر 2021 لا توجد طريقة "built-in" للقيام بذلك في Django بشكل إفتراضي. سيظهر Django استثناء DoesNotExist في كل مرة. الطريقة الأسهل للتعامل مع هذا في Python هي إستخدام جملة try .. except، كالتالي: try: writers = User.objects.get(role="writer") except User.DoesNotExist: writers = None ما فعلته هوإستخدام نوع الخطأ User.DoesNotExist للتأكد من وجود الكائن، بهذه الطريقة يمكنك معرفة إن لم يوجد أي كتاب writers في الموقع، يمكنك أيضًا أن تستخدم نوع الخطأ ObjectDoesNotExist كالتالي: from django.core.exceptions import ObjectDoesNotExist try: writers = User.objects.get(role="writer") except ObjectDoesNotExist: writers = None وفي حالة كنت تريد أن يتم إحضار أو كائن فقط، فيمكنك أن تستخدم التابع first، كالتالي: User.objects.filter(role="writer").first() في حالة أردت التأكد فقط من وجود الكائن في قاعدة البيانات، فيمكنك أن تستعمل exists، كالتالي: User.objects.filter(role="writer").exists() 1 اقتباس
0 Ali Haidar Ahmad نشر 5 سبتمبر 2021 أرسل تقرير نشر 5 سبتمبر 2021 (معدل) إضافة لإجابة سامح الرئعة يمكنك إنشاء دالة للقيام بهذه المهمة: def chk(model, **kwargs): try: return model.objects.get(**kwargs) except model.DoesNotExist: return None # واستخدمها بالشكل التالي get = chk(Content,role="writer") #في حالة عدم التطابق None القيمة get ستعيد #Content وإلا ستعيد ال # MultipleObjectsReturned سيعيد الاستثناء #role="writer" إذا تم إرجاع أكثر من إدخال واحد ل # لذا يجب التقاط هذا الاستثناء لكي لايتسبب بمشاكل def chk(model, **kwargs): try: return model.objects.get(**kwargs) except model.MultipleObjectsReturned as e: print(e) except model.DoesNotExist: return None كذلك هناك الدالة get_object_or_None من الموديول annoying.functions : from annoying.functions import get_object_or_None as get #.... go = get(Content, role="writer") تم التعديل في 5 سبتمبر 2021 بواسطة Ali Haidar Ahmad 1 اقتباس
السؤال
Amer Abdallah
عندما أطلب من نموذج الحصول على كائن معين، فإنه يظهر خطأ DoesNotExist عندما لا يكون هناك كائن مطابق.
بدلاً من ظهور خطأ DoesNotExist، كيف يمكنني أن أجبره على إعاده None بدلاً من ذلك في حالة عدم وجود الكائن؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.