python - 如果组合 django 中不存在任何一个输入,python 过滤器将返回 none
问题描述
我正在为文学创建一个模型,我们可以在其中输入英语、德语、法语等。我的模型可能包含英语、德语、法语。如果我将这 3 个值放入其中,它会向我显示正确的输出,但如果键入英语、德语,则它不会返回任何内容,因为一个条件失败,但实际上我希望它以这样一种方式返回,即如果满足该条件,它会返回该特定对象,如果我写的是英语、德语、法语和模型只包含英语、德语它应该返回英语、德语而不是无
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)
解决方案
你必须使用Q 对象
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))
总结上面的查询,查询是检查 codepool_advanced_language1=lang1 或 codepool_advanced_language2=lang2 或 codepool_advanced_language3=lang3 等等。
“|” 是OR运算符
您可以在此处了解有关 django Q 对象的更多信息
编辑: 根据问题作者的评论添加额外的答案。
是的,有一个解决方案
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))
您可以拥有列表中的所有语言,并且可以像这样使用它,
如:Q(codepool_advanced_language1__in=languages)|Q(codepool_advanced_language2__in=languages)|
等等。
推荐阅读
- python - 在熊猫中创建列的编码列
- typescript - 接口类型推断
- asp.net - Web Api [授权] 在 IIS 8.5 中不起作用
- php - 获取图像的 mime 类型
- laravel-5 - 同时使用 have 和 paginate 方法时查询生成器错误
- r - networkDynamic R 可视化在协调的时间段上错误地调用顶点属性
- mysql - mysql 中的 DEFAULT CURRENT_TIMESTAMP 错误,同时更改表
- java - 从资产复制数据库时出错
- wordpress - 最初没有加载图像。当我们手动点击图片网址然后显示图片
- django - 具有两个过滤的单独列表的基于 Django 类的列表视图