ما هو أبسط طريقة الانضمام __contains و __in؟
-
20-09-2019 - |
سؤال
أقوم بعمل وظيفة البحث في العلامات، يمكن للمستخدم مراقبة الكثير من العلامات، وأحصل على كل شيء في واحد في واحد، والآن أود أن أجد كل النص الذي يتضمن علامة واحدة على الأقل من القائمة.
رمزي: text__contains__in=('asd','dsa')
فكرتي الوحيدة هي حلقة على سبيل المثال:
q = text.objects.all()
for t in tag_tuple:
q.filter(data__contains=t)
على سبيل المثال: إدخال TUPLE من العلامات، ('car', 'cat', 'cinema')
إخراج جميع الرسائل ما الذي يحتوي على كلمة واحدة على الأقل من هذا tuple، لذلك My cat is in the car
, cat is not allowed in the cinema
, i will drive my car to the cinema
شكرا للمساعدة!
المحلول
ها أنت ذا:
filter = Q()
for t in tag_tuple:
filter = filter | Q(data__contains=t)
return text.objects.filter(filter)
بضع نصائح:
- يجب أن تسمية فئات النماذج الخاصة بك مع رأس مال (أي
Text
, ، ليسtext
) - قد ترغب
__icontains
بدلا من ذلك إذا لم تكن قلقة بشأن القضية
نصائح أخرى
لا أعرف django، لذلك ليس لدي أي فكرة عن كيفية تطبيق هذا المرشح، لكن يبدو أنك تريد وظيفة مثل هذا واحد:
def contains_one_of(tags, text):
text = text.split() # tags should match complete words, not partial words
return any(t in text for t in tags)
لا تنتمي إلى StackOverflow