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

السؤال

نشر

أريد أن أكون قادرًا على عرض المنشورات التي أضافها المستخدم (تم إدراجها كمنشئ 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...