简体   繁体   中英

python filter returns none if any one input is not present in combination django

i am creating a model in for a literature in which we can type english,german,french etc.. , my model may be containing english,german,french. if i put these 3 values in it, it shows me correct output but if type english,german it returns none because one condition failed, but in fact i want it in such a way that it return that perticular object if that condition met, if i write english,german,french and model contains only english,german it should return english,german instead of none

def resolve_codepool_advanced_lang5(root,info,lang1,lang2,lang3,lang4,lang5):
        return Codepool_Advanced.objects.filter(codepool_advanced_language1=lang1,codepool_advanced_language2=lang2,codepool_advanced_language3=lang3,codepool_advanced_language4=lang4,codepool_advanced_language5=lang5)

You have to use Q objects

from django.db.models import  Q


def resolve_codepool_advanced_lang5(root,info,lang1,lang2,lang3,lang4,lang5):
        return Codepool_Advanced.objects.filter(Q(codepool_advanced_language1=lang1)| Q(codepool_advanced_language2=lang2)| Q(codepool_advanced_language3=lang3)| Q(codepool_advanced_language4=lang4)| Q(codepool_advanced_language5=lang5))

To summarise the above query, The query is checking if codepool_advanced_language1=lang1 or codepool_advanced_language2=lang2 or codepool_advanced_language3=lang3 and so on.

"|" is an OR Operator

You can learn more about django Q objects here

EDIT: Adding additional answer based on the comment made by the Author of the question.

Yes, there's a solution

def resolve_codepool_advanced_lang5(root,info,lang1,lang2,lang3,lang4,lang5):
    languages = [lang1,lang2,lang3,lang4,lang5]
    return Codepool_Advanced.objects.filter(Q(codepool_advanced_language1__in=languages)| Q(codepool_advanced_language2__in=languages)| Q(codepool_advanced_language3__in=languages)| Q(codepool_advanced_language4__in=languages)| Q(codepool_advanced_language5__in=languages))

You can have all the languages in the list and you can use it like,

eg: Q(codepool_advanced_language1__in=languages)|Q(codepool_advanced_language2__in=languages)| and so on.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM