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.