Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.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
Python Django-有没有一种方法可以优化循环中的ORM多通调用?_Python_Django_Django Models_Django Views_Django Orm - Fatal编程技术网

Python Django-有没有一种方法可以优化循环中的ORM多通调用?

Python Django-有没有一种方法可以优化循环中的ORM多通调用?,python,django,django-models,django-views,django-orm,Python,Django,Django Models,Django Views,Django Orm,我在Django的观点中看到了这种模式: <ol> {% for a in ModelA %} <li>{{ a.title }}</li> <ol> {% for b in a.modelb_set.all %} <li>{{ b.title }}</li> <ul> {% for c in b.modelc_set.all %}

我在Django的观点中看到了这种模式:

<ol>
{% for a in ModelA %}
    <li>{{ a.title }}</li>
    <ol>
    {% for b in a.modelb_set.all %}
        <li>{{ b.title }}</li>
        <ul>
            {% for c in b.modelc_set.all %}
                <li>{{ c.text }}</li>
                <ul>
                {% for d in c.modeld_set.all %}
                    <li>{{ d.text }}</li>
                {% endfor %}
                </ul>
            {% endfor %}
        {% endif %}
        </ul>
    {% endfor %}
    </ol>
{% endfor %}
</ol>

{ModelA%%中的a的百分比}
  • {{a.title}}
  • {a.modelbu set.all%}
  • {{b.title}}
    • {b.modelc_set.all%}
    • {{c.text}}
      • {c.modeld_set.all%}
      • {{d.text}}
      • {%endfor%}
      {%endfor%} {%endif%}
    {%endfor%} {%endfor%}
    当然,这里的问题是,这是在进行n^4个数据库调用,这是非常不可伸缩的。对于单个
    ModelA
    对象,我进行了大约23次SQL查询,我假设这个数字只会随着
    ModelA
    查询数量的增加而增加

    有没有一个通用的方法来减少需要在这里进行的查询的数量?如有任何想法,将不胜感激:)

    (如果你好奇的话,实际的代码是-ModelA是Poll,ModelB是textcoocequestion,ModelC是textcooce,ModelD是textcoocenuance。

    你有模型吗? 如果是这样,我建议上传模型代码

    我通常这样编码。 首先,如果我使用ManyToManyField,则使用预取_相关('fields','field_usubfield',)

    其次,你必须使用相关的名字。不管有多少字段,外键,你都可以得到一个更好的相关名字

    class CheckList(models.Model):
        """docstring for CheckList"""
        """ 설명 """
        name = models.CharField(max_length=30)
    
       def __str__(self):
           return self.name
    
    class Question(models.Model):
        checklist = models.ForeignKey(CheckList, 
                on_delete=models.CASCADE, related_name='questions')
    
    # example
    check_list = CheckList.objects.prefetch_related('questions').all()
    
    你有模特儿吗? 如果是这样,我建议上传模型代码

    我通常这样编码。 首先,如果我使用ManyToManyField,则使用预取_相关('fields','field_usubfield',)

    其次,你必须使用相关的名字。不管有多少字段,外键,你都可以得到一个更好的相关名字

    class CheckList(models.Model):
        """docstring for CheckList"""
        """ 설명 """
        name = models.CharField(max_length=30)
    
       def __str__(self):
           return self.name
    
    class Question(models.Model):
        checklist = models.ForeignKey(CheckList, 
                on_delete=models.CASCADE, related_name='questions')
    
    # example
    check_list = CheckList.objects.prefetch_related('questions').all()
    

    模型代码的可能重复项在此处:回答正确,除非您绝对不需要设置相关的\u名称。模型代码在此处:回答正确,除非您绝对不需要设置相关的\u名称。