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

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

Amer Abdallah

السؤال

في نموذج 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؟

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

Recommended Posts

  • 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)

 

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

  • 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)

 

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...