Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Django中有2个多字段的查询中使用筛选器_Django_Filter_Many To Many_Field - Fatal编程技术网

在Django中有2个多字段的查询中使用筛选器

在Django中有2个多字段的查询中使用筛选器,django,filter,many-to-many,field,Django,Filter,Many To Many,Field,我会尽力描述我在这里要做的事情。 我有三门课: 问题 试题类型 问题模板 这些关系是: 问题类型 问题模板问题类型 因此,查询位于QuestionTemplate中的一个方法中,它可以为我提供一个可能的问题列表,这些问题具有与QuestionTemplate相关的相同QuestionType 我尝试过:questions=Question.objects.filtertype\uuu in=template.type.all 其中template是一个QuestionTemplate对象。 但是

我会尽力描述我在这里要做的事情。 我有三门课:

问题 试题类型 问题模板 这些关系是:

问题类型 问题模板问题类型 因此,查询位于QuestionTemplate中的一个方法中,它可以为我提供一个可能的问题列表,这些问题具有与QuestionTemplate相关的相同QuestionType

我尝试过:questions=Question.objects.filtertype\uuu in=template.type.all 其中template是一个QuestionTemplate对象。 但是这个查询返回给我的问题在模板的QuestionType列表中至少有一个QuestionType。 我想做的是让问题和模板中的问题类型完全相同

我尝试了很多方法,但都无法成功,请救救我

types = template.type.all()
query = Question.objects
for t in types:
    query = query.filter(type = t)
questions = []
for q in query.select_related('type'):
    ok = True
    for t in q.type.all():
        if t not in types:
            ok = False
            break
    if ok:
        questions.append(q)
save_questions_in_m2m_relations_so_that_you_dont_have_to_repeat_this(questions)

相当笨拙,但应该做你需要的。

请澄清你想得到什么。你试图得到的问题是完全一样的。。。?我想你在最初的帖子中留下了几个词。我想在给定的问题模板上获得与问题类型具有相同精确连接的问题。因此,如果我得到一个模板,它有QuestionType=Type1,Type2和Type3,那么查询将返回所有与QuestionType=Type1,Type2,Type3有联系的问题。因此,与QuestionType有不同联系的任何其他问题,如Epe1、Type2和Type5,都不会进入列表。。这同样适用于一个提问类型为Type1和Type2的问题,因为它没有像模板那样的Type3,它也会被丢弃,只使用filter/exclude而不是通过列表检查进行迭代是否更好?@Arruda:filter/exclude执行数据库中的所有计算,因此这总是更快,通常是10倍。但我想不出纯过滤/排除的解决方案。也许你可以用原始SQL来实现。但在优化之前,请确保它实际上是一个性能瓶颈。我想知道这一点的主要原因是因为我想学习如何面对这样的问题。。。这个解决方案很适合我现在面临的问题,但也许将来我会面临另一个只能用querys来处理的问题,所以我想知道如何用这种方式来解决。