1

保存记录时如何避免对模型表单进行外键检查,因为这会产生 2 个额外的查询,并且我需要应用程序的速度。

SELECT (1) AS "a" FROM "auth_user" WHERE "auth_user"."id" = 1 LIMIT 1

SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined" FROM "auth_user" WHERE "auth_user"."id" = 1
4

1 回答 1

1

在模型中,使用该db_index选项。

 field = django.db.models.ForeignKey('Field', db_index=False)

Django 文档ForeignKey

在 ForeignKey 上自动创建一个数据库索引。您可以通过将 db_index 设置为 False 来禁用此功能。如果您为一致性而不是连接创建外键,或者如果您将创建一个替代索引(如部分或多列索引),您可能希望避免索引的开销。

编辑:db_index=False将关闭数据库外键检查INSERTor UPDATE,但不会影响 Django 的表单验证,这发生在orINSERT之前UPDATE

你有四个选择。第一个是最简单的。

(1) 不验证表格。创建它

form = MyForm(initial=request.GET.items())

然后不要打电话is_valid()

(2) 覆盖表单的is_valid方法。这使您仍然可以通过调用某些字段(但不是其他字段)来验证validate()它们。

(3) 创建您自己的表单字段类型,无需验证器。

(4) 不要使用 Django 表单。创建您自己的表单 HTML、验证和模型保存。

于 2013-10-29T05:05:42.263 回答