如何避免使用 Django 模型表单重复 SQL 查询?

How can I avoid duplicate SQL queries with Django model forms?

我有以下型号:

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=30)

class Article(models.Models):
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    text = models.TextField()

和一个通用的 CreateView

from django.views.generic.edit import CreateView

urlpatterns += [
    path("", CreateView.as_view(model=models.Article, fields="__all__"))
]

使用以下模板 (article_form.html)

<form method="post">
{% csrf_token %}
<table>
{{ form }}
</table>
<input type="submit" value="Submit">
</form>

我正在使用 Django Debug Toolbar 列出针对每个 Web 请求执行的 SQL 查询。

我的问题是: 为什么以下 SQL 作者列表查询对每个请求执行 两次 ?我怎样才能避免重复查询?

SELECT "myapp_author"."id", "myapp_author"."name" FROM "myapp_author"

此外,调试工具栏显示第一个查询只用了 0.5 毫秒,而第二个查询用了 42 毫秒!几乎长了 100 倍。怎么会这样?

我正在使用带有 SQLite 数据库的 Django 3.2。

谢谢!

进一步调查问题后,我发现 SQL 查询也可以通过适当配置 LOGGING 记录到控制台:

settings.py

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            "level": "DEBUG",
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'level': 'DEBUG',
        },
    },
}

这表明 SELECT 查询实际上只执行了一次,这是应该的。所以这个错误肯定是在Debug Toolbar 误报了两次。