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

إستخدام المعامل OR نموذج جانغو Django؟

Amer Abdallah

السؤال

أريد أن أكون قادرًا على عرض المنشورات التي أضافها المستخدم (تم إدراجها كمنشئ creator) أو تمت الموافقة عليها من قِبل مسؤول. ما أحاول أن أقوم به هو تنفيذ جملة SQL التالية:

posts.creator = 'owner' or posts.accepted = True

كيف أفعل هذا في جانغو Django؟

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

Recommended Posts

  • 1

يمكنك أن تستعمل الكائن Qمع علامة pipe | كالتالي:

from django.db.models import Q

Post.objects.filter(Q(creator='owner') | Q(accepted=True))

أو يمكنك أن تقوم بإستخدام علامة pipe | بشكل مباشر كالتالي:

posts = Post.objects.filter(post.creator = 'owner') | Post.objects.filter(post.accepted = True)

 

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

  • 0

يجب أن تجعل الفلتر ديناميكياً ثم عليك استخدام Lambda مثلاً:

from django.db.models import Q
brands = ['ABC','DEF' , 'GHI']
queryset = Product.objects.filter(reduce(lambda x, y: x | y, [Q(brand=item) for item in brands]))

بحيث أن:

reduce(lambda x, y: x | y, [Q(brand=item) for item in brands]) <==> Q(brand=brands[0]) | Q(brand=brands[1]) |.....

 

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

  • 0

يمكنك استخدام ال operator.or من خلال المكتبة operator لاحظ المثال التالي

filter_kwargs = {
    'field_a': 123,
    'field_b__in': (3, 4, 5, ),
}
list_of_Q = [Q(**{key: val}) for key, val in filter_kwargs.items()]
Item.objects.filter(reduce(operator.or_, list_of_Q))

في Python3 ، لم تعد الدالة reducer موجودة built in في بايثون بعد الآن ، يمكنك استخدامها من خلال

from functools import reduce

 

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...