سؤال

أقوم بعمل وظيفة البحث في العلامات، يمكن للمستخدم مراقبة الكثير من العلامات، وأحصل على كل شيء في واحد في واحد، والآن أود أن أجد كل النص الذي يتضمن علامة واحدة على الأقل من القائمة.
رمزي: 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)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top