تخطَّ إلى المحتوى

F()

الإشارة لقيمة حقل داخل الاستعلام نفسه F()

F() تشير لقيمة حقل موجود بقاعدة البيانات نفسها داخل الاستعلام، فتُمكّنك من مقارنة حقلين ببعض أو تحديث حقل بالاعتماد على قيمته الحالية — بجملة SQL واحدة آمنة من تعارض التزامن (race condition).

بدون F، زيادة عدّاد تتطلب قراءة القيمة الحالية بـ Python ثم كتابتها من جديد — خطوتان منفصلتان قد يتداخل بينهما طلب آخر (race condition) فتُفقد إحدى الزيادات. F() تنقل العملية بالكامل لقاعدة البيانات كخطوة ذرّية واحدة.

الصياغة

from django.db.models import F
Model.objects.filter(...).update(field=F("field") + value)

📄 مثال

from django.db.models import F

# ❌ عرضة لتعارض التزامن: قراءة ثم كتابة بخطوتين منفصلتين
post = Post.objects.get(pk=1)
post.views = post.views + 1
post.save()

# ✅ آمن وذرّي: خطوة واحدة بقاعدة البيانات مباشرة
Post.objects.filter(pk=1).update(views=F("views") + 1)

# مقارنة بين حقلين بنفس السجل
Post.objects.filter(comments_count__gt=F("views"))

أهم المعاملات

المعاملالوظيفة
F("field")مرجع لقيمة حقل حالية بقاعدة البيانات، قابل لعمليات حسابية (+ - * /)

💡 نصائح عملية

  • استخدمها دائمًا لعدّادات تُحدَّث بتزامن عالٍ (مشاهدات، إعجابات) بدل قراءة/تعديل/حفظ يدوي بثلاث خطوات

⚠️ أخطاء شائعة

  • استخدام F() بعملية update() تحتاج عبور علاقة (JOIN) — غير مدعوم، ترمي FieldError؛ F() تعمل فقط ضمن حقول نفس الجدول بعمليات update()

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار DJANGO الكامل بالعربي.