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

السؤال

نشر

ما الذي يجعلني أستخدم الكود التالي بدلًا من إنشاء نموذج form بإستخدام الصنف ModelForm وإستدعاء التابع is_valid للتحقق من النموذج form و model معًا:

save(commit=False)

متى يجب أن أستعمل save(commit=False) من الأساس؟ هل هناك مواقف حيث قد يكون هذا الكود مفيدًا؟

 

Recommended Posts

  • 1
نشر (معدل)

عند إستعمال save مع commit=False  الكائن المُعاد من الدالة لن يُحفظ في قاعدة البيانات عكس الأمر عند إستخدام commit=True الكائن سوف يٌحفظ وبعدها يُعاد. يكون هذا الفعل مٌفيداً عندما نٌريد إجراء مُعالجة إضافية للكائن قبل  حفظه في قاعدة البيانات.

كمثال تطبيقي، نفرض أننا نملك نموذجاً حيثُ يكون عنوان البريد الالكتروني واسم المستخدم  مُتماثلين دائما في هذه الحالة عند رسم النموذج نقوم بوضع حقل واحد خاص بالبريد الإلكتروني مثلاً وعند حفظ النموذج نُعبئ حقل اسم المستخدم بنفس القيمة.

class UserForm(forms.ModelForm):
    ...
    def save(self):
        # نقوم بتمرير
        #commit=False
        # للنموذج
        # الكائن  المُعاد
        # لا يكون محفوظا في قاعدة البيانات في هذه اللحظة
        user = super(UserForm, self).save(commit=False)
        # "هنا نجعل قيمة "اسم المستخدم" هي نفس قيمة "البريد الالكتروني
        user.username = user.email
        # هنا يتم الحفظ
        user.save()
        return user

عكس ما إذا استخدمنا commit=True فإن الكائن سوف يٌحفظ في قاعدة البيانات قبل أن نقوم بوضع قيمة "اسم المستخدم".

تم التعديل في بواسطة مسعود زاهي

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...