1

レコードを保存するときにモデルフォームでの foreingkey チェックを回避するにはどうすればよいですか。これにより、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 に設定します。結合ではなく整合性のために外部キーを作成する場合、または部分または複数列インデックスなどの代替インデックスを作成する場合は、インデックスのオーバーヘッドを回避したい場合があります。

編集: orのデータベース外部キーチェックをdb_index=Falseオフにしますが、orのに発生する Django のフォーム検証には影響しません。INSERTUPDATEINSERTUPDATE

4 つのオプションがあります。最初は最も簡単です。

(1) フォームを検証しないでください。で作成します

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

そして、電話しないでくださいis_valid()

(2) フォームのis_validメソッドをオーバーライドします。これにより、一部のフィールドを呼び出して検証することができます (他のフィールドは検証できません) validate()

(3) バリデータなしで、独自のフォーム フィールド タイプを作成します。

(4) Django フォームを使用しないでください。独自のフォーム HTML、検証、およびモデルの保存を作成します。

于 2013-10-29T05:05:42.263 に答える