如何在保存记录时避免对modelform进行外键检查,因为这会产生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
答案 0 :(得分:1)
在模型中,使用db_index
选项。
field = django.db.models.ForeignKey('Field', db_index=False)
ForeignKey
的Django文档:
在ForeignKey上自动创建数据库索引。您可以通过将db_index设置为False来禁用此功能。如果要为一致性而不是连接创建外键,或者如果要创建替代索引(如部分索引或多列索引),则可能希望避免索引的开销。
编辑:db_index=False
将关闭INSERT
或UPDATE
上的数据库外键检查,但它不会影响Django的表单验证,这会发生< em>之前 INSERT
或UPDATE
。
您有四种选择。第一个是最简单的。
(1)不要验证表格。使用
创建它form = MyForm(initial=request.GET.items())
然后不要拨打is_valid()
。
(2)覆盖表单的is_valid
方法。这样,您仍然可以通过调用validate()
来验证某些字段(而不是其他字段)。
(3)创建自己的表单字段类型,不带验证器。
(4)不要使用Django表单。创建自己的表单HTML,验证和模型保存。