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

السؤال

نشر

أحاول حفظ كائن في قاعدة البيانات الخاصة بي، لكن يظهر خطأ من نوع MultiValueDictKeyError.

تكمن المشاكل في النموذج ، عندما يتم تحديد حقل من نوع checkbox (وضع علامة صح عليه) في نموذج form ويسمى الحقل is_published. المشكلة تحدث إذا لم يتم تحديد خانة الاختيار ، فمن الواضح أنه لا يتم تمرير أي شيء إذا لم يتم تحديد هذا الحقل. ويظهر أن الخطأ يحدث بسبب السطر التالي:

is_published = request.POST['is_published']

كيف أتعامل بشكل صحيح مع هذا الاستثناء وأقوم بتصحيحه؟

Recommended Posts

  • 1
نشر

يحدث هذا الخطأ لأن المتصفح لا يقوم بإرسال حقل checkbox إن لم تكن محددًا، وبالتالي لا يوجد مفتاح باسم is_published في القاموس request.POST، لذلك يمكنك أن تستخدم التابع get الموجود في أي قاموس dictionary والذي يسمح لك يتمرير قيمة إفتراضية في حالة عدم وجود المفتاح في القاموس، كالتالي:

is_published = request.POST.get('is_published', False)

أو يمكنك عمل ذلك من خلال جملة if .. else، على النحو التالي:

if 'is_published' in request.POST:
    is_published = request.POST['is_published']
else:
    is_published = False

ويمكن إختصار الكود السابق في سطر واحد، كالتالي:

is_published = 'is_published' in request.POST and request.POST['is_published']

كما يمكنك أن تستخدم جملة try ... except:

from django.utils.datastructures import MultiValueDictKeyError

try:
    is_published = request.POST['is_published']
except MultiValueDictKeyError:
    # في حالة لم يوجد المفتاح is_published
    is_published = False

 

  • 0
نشر

يمكنك استخدام الطريقة get بحيث حيث انها الطريقة الاساسية لجلب قيمة، ويمكنك استخدامها كالتالي:

is_published = request.POST.get('is_published', False)

وبشكل عام يمكنك استخدامها هكذا:

my_var = dict.get(<key>, <default>)

يمكنك كذلك تجربة الطريقة التالية:

is_published = 'is_published' in request.POST

وهذه ايضا تؤدي نفس النتيجة:

is_published = 'is_published' in request.POST and request.POST['is_published']

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...