• 1

كيفية عمل شرط لا يساوي في queryset filtering في جانغو Django؟

في نموذج QuerySets في جانغو Django، أرى أن هناك __gt و __lt لمقارنة القيم، لكن هل هناك __ne أو! = (not equals)؟ أريد تصفية النتائج باستخدام شرط لا يساوي. على سبيل المثال:

Model:
    bool x;
    int y;

أريد أن أقوم بـ :

results = Model.objects.exclude(x=True, y!=10)

لكن هذه الطريقة لم تفلح، لذلك أستخدم الكود التالي:

results = Model.objects.exclude(x=True, y__lt=10).exclude(x=True, y__gt=10)

لكن أعتقد أن الكود السابق ليس عملي ويسبب بطيء أثناء التنفيذ، لذلك هل توجد طريقة لعمل شرط "لا يساوي" في جانغو Django؟

2 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

هناك 3 طرق:الأولى استخدام Q() objects مع  معامل النفي ~:

from django.db.models import Q
r = QuerySet.filter(~Q(a=True), x=5)

والثانية استخدام exclude مع filter:

r = Model.objects.exclude(a=True).filter(x=5)

والثالثة هي إنشاء custom lookup لكن أولاً عليك إنشاء lookup بنفسك:

from django.db.models import Lookup
class check(Lookup):
    #lookup اسم ال
    lookup_name = 'ne'
    def as_sql(self, compiler, connection):
        lhs, lhs_params = self.process_lhs(compiler, connection)
        rhs, rhs_params = self.process_rhs(compiler, connection)
        params = lhs_params + rhs_params
        return '%s <> %s' % (lhs, rhs), params
# ثم نقوم بتسجيله
from django.db.models import Field
Field.register_lookup(check)
#في استعلامك __ne lookup الآن يمكنك استخدام 
results = Model.objects.exclude(a=True, x__ne=5)

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

يمكنك استخدام كائنات Q لهذا الشيء,  يمكن نفيها باستخدام عامل التشغيل ~ ودمجها تمام

from django.db.models import Q
object_list = QuerySet.filter(x=True, ~Q(y=10))

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

results = Model.objects.exclude(x=True).filter(y=10)

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن