distinct()
إزالة النتائج المكرّرة distinct()
distinct() تحذف السجلات المكرّرة تمامًا من نتيجة الاستعلام — مفيدة خصوصًا بعد استعلام يعبر علاقة ManyToMany أو عكسية قد يُنتج نفس السجل أكثر من مرة.
بعض الاستعلامات التي تفلتر عبر علاقة (مثل منشور له أكثر من وسم مطابق للفلتر) تُرجع نفس السجل الأساسي عدة مرات بالنتيجة الخام، لأن قاعدة البيانات تنفّذ JOIN داخليًا. distinct() تزيل هذا التكرار قبل إرجاع النتيجة النهائية.
الصياغة
Model.objects.filter(...).distinct()
📄 مثال
# بدون distinct: قد يظهر نفس المنشور مرتين لو طابق وسمين معًا Post.objects.filter(tags__name__in=["بايثون", "ويب"]) # مع distinct: كل منشور مرة واحدة فقط Post.objects.filter(tags__name__in=["بايثون", "ويب"]).distinct()
💡 نصائح عملية
- استخدمها بعد فلترة عبر علاقة ManyToMany أو عكسية قد تُنتج نفس السجل أكثر من مرة بالنتيجة الخام
⚠️ أخطاء شائعة
- إضافتها كحل افتراضي لكل استعلام دون التأكد من وجود تكرار فعلي محتمل — تكلفة أداء إضافية بلا فائدة حقيقية
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار DJANGO الكامل بالعربي.