Django:过滤和编辑对象的model_集,并以一对多关系返回该对象的查询集

Django:过滤和编辑对象的model_集,并以一对多关系返回该对象的查询集,django,django-models,django-queryset,one-to-many,django-filter,Django,Django Models,Django Queryset,One To Many,Django Filter,假设我有两个模型,它们之间有一对多的关系。这些是我的模型: 考试 问题: 我想获得考试对象相关问题的QuerySet,这些考试对象的文本包含q1\u text。此外,我还想筛选这些只包含q1\u文本的考试对象的问题集 这些是我的考试和问题模型: models.py 假设在返回的QuerySet中存在问题对象,其中一些问题对象的文本字段值为q1\u text,另一些问题对象的文本字段值为q2\u text为此,我确实使用了此过滤器: Exam.objects.filter(question__te

假设我有两个模型,它们之间有一对多的关系。这些是我的模型:

  • 考试
  • 问题:
  • 我想获得考试对象相关问题的
    QuerySet
    ,这些考试对象的文本包含
    q1\u text
    。此外,我还想筛选这些只包含
    q1\u文本的考试对象的
    问题集

    这些是我的
    考试
    问题
    模型:

    models.py 假设在返回的
    QuerySet
    中存在问题对象,其中一些问题对象的文本字段值为
    q1\u text
    ,另一些问题对象的文本字段值为
    q2\u text
    为此,我确实使用了此过滤器:

    Exam.objects.filter(question__text__icontains='q1_text')
    
    如果我使用此代码,我会得到考试对象的
    QuerySet
    ,但在这些对象的
    question\u set
    中有一些带有文本
    q2\u text
    的问题。但是,我只想要包含
    q1\u text
    的问题,所以对我来说结果不正确

    我还需要过滤
    考试对象的
    问题集
    。所以我用了这个代码:

    第二个过滤器

    Exam.objects.filter(question__text__icontains='q1_text')[i].question_set.all().filter(text__icontains='q1_text')
    
    但问题是,此代码的输出是
    问题模型的
    QuerySet
    ,但我希望
    考试模型的
    QuerySet
    具有编辑的
    问题集
    ,该问题集只包含其
    文本
    包含的
    q1\u文本

    我的建议:

    一种可能的方法是使用第二个过滤器,然后设置 将
    考试对象的
    问题集
    属性设置为它的输出,但我不知道 如何在代码中实现它

    一般来说,我认为我们应该找到一种方法来编辑或过滤
    问题集
    检查对象的
    ,并在输出中获取这些检查对象的QuerySet


    轻松应对,享受与Django ORM一起工作的乐趣

  • 首先,在
    问题
    模型中的
    考试
    字段中添加
    相关名称
    (阅读更多:,)
    exam=models.Foreign‍‍‍‍键(考试,相关的考试题,在_delete=models.CASCADE上)‍‍‍‍‍‍
    
  • 最后,要在
    filter
    方法中设置条件,请使用
    Q
    对象(阅读更多信息:,)。请尝试以下查询:
  • 从django.db.models导入Q
    q_对象=q(
    Q(问题\考试\考试=您当前的\考试)和Q(问题\考试\文本\包含='q1 \文本')
    )
    最终结果=Exam.objects.filter(q\U对象)
    
    希望我能帮助你

    Exam.objects.filter(question__text__icontains='q1_text')[i].question_set.all().filter(text__icontains='q1_text')