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

السؤال

نشر (معدل)

أحاول تصفية المستخدمين حسب حقل مخصص في كل ملف تعريفي خاص بالمستخدم ويسمى الحقل profile. وهو عبارة عن حقل من نوع int، وتكون قيمته بين 0 و 3.

إذا قمت بالتصفية باستخدام علامة يساوي ، فسأحصل على قائمة بالمستخدمين بالمستوى المختار كما هو متوقع:

users = User.objects.filter(profile__level = 0)

لكن عندما أحاول التصفية باستخدام علامة أقل من:

users = User.objects.filter(profile__level < 3)

يظهر لي الخطأ التالي:

global name 'profile__level' is not defined

ما الخطأ الذي قمت به هنا وكيف أوم بإصلاحه؟

تم التعديل في بواسطة Amer Abdallah

Recommended Posts

  • 1
نشر

في جانغو Django لا يتم التصفية بإستخدام علامة أقل من > أو أكبر من <، ولكن تستخدم اسم الحقل مع lte أو gte، كالتالي:

أقل من أو يساوي:

users = User.objects.filter(profile__level__lte=0)

أكبر من أو يساوي:

users = User.objects.filter(profile__level__gte=0)

وإذا لم تريد أن تحصل على الكائنات التي تساوي هذه القيمة، أي أنك تريد أن تستخدم أقل من (وليس أقل من أو يساوي)، فكل ما عليك فعله هو حذف حرف e في نهاية اسم الخاصية، ليكون الكود كالتالي:

أقل من:

users = User.objects.filter(profile__level__lt=0)

أكبر من:

users = User.objects.filter(profile__level__lg=0)

 

  • 0
نشر

يمكنك ببساطة اختيار الحدود التي تريد أن تختار منها كطريقة أخرى لعمل filter كالتالي:

filter(gender='MALE', profile__level=(10, 50))

أو اختيار الطريقة التي أوضحها سامح لاختيار الحدود التي تريد عمل filter عليها كالتالي:

User.objects.filter(gender='MALE', profile__level__gte = 10, profile__level__lte = 50).count()

 

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...