0

私の models.py では、外部キーにオプションのフィールドが必要です。私はこれを試しました:

field = models.ForeignKey(MyModel, null=True, blank=True, default=None)

このエラーが発生しています:

model.mymodel_id may not be NULL

私はsqliteを使用しています。役立つ場合は、例外の場所を次に示します。

/usr/lib/python2.6/site-packages/django/db/backends/sqlite3/base.py in execute, line 200
4

4 に答える 4

5

以前に null ではなく、以前に同期した場合、再同期しても変更されません。テーブルを削除するか、South などの移行ツールを使用するか、SQL の列を直接変更してください。

于 2010-09-08T00:42:03.890 に答える
1

と の両方でなければならないと思いnull=Trueますblank=True

于 2010-09-08T00:42:19.880 に答える
0

これについてはよくわかりませんが、「default = None」を失い、reset/syncdbを実行する必要があると思います。デフォルトでは、null/空白の情報が上書きされます。つまり、管理者に空白を指定すると、Noneが格納されます(その表現はDBごとに異なる場合があります)。より確実にするために、コード/ドキュメントを調べる必要があります。

于 2010-09-08T04:53:50.930 に答える
0

私は同じ問題を抱えており、テーブル作成プロセス自体にドリルダウンしました (テストを行う際にも問題が発生するため)。

このようなモデルの場合:

class MyModel(models.Model):
    owner = models.ForeignKey(User, null=True, blank=True)

生成されたSQL(を使用./manage.py sql)は次のとおりです。

CREATE TABLE `app_mymodel` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `owner_id` integer
)
ALTER TABLE `app_mymodel` ADD CONSTRAINT `owner_id_refs_id_34553282` FOREIGN KEY (`owner_id`) REFERENCES `auth_user` (`id`);

したがって、テーブル自体は Null 値を許可しているように見えますが、DB レベルでの FK 制約は実際には値を実際の参照に制限しているため、NULL 値はありません...

Djangoのバグですか?

編集:前のコマンドで作成されたテーブルは、FK 列で NULL 値DEFAULT NULL受け入れ、実際にSHOW CREATE TABLE app_mymodel;. 奇妙ですが、今はエラーを再現できません。

于 2010-11-05T12:28:19.797 に答える