0

私はdjangoモデルを持っています:

#models.py

class m1(models.Model):
    some_word = models.CharField()

'manage.py syncdb'コマンドでdbを作成し、モデルにForeignKeyフィールドを追加しました

#models.py

from django.contrib.auth.models import User
class m1(models.Model):
    some_word = models.CharField()
    user = models.ForeignKey(User)

私の知る限り、ネイティブdjangoはdbの変更を提供しないため、列'user_id'を手動で作成する必要があります。わかりました。phpmyadminに移動してこの列を作成します。この時点で、すべてが正常であり、アプリは機能します。しかし、ユーザーフィールドにオプション「blank=True」が必要であることを理解しました。

#models.py

from django.contrib.auth.models import User
class m1(models.Model):
    some_word = models.CharField()
    user = models.ForeignKey(User, blank = True)

また、m1オブジェクトを保存しているときに、「Noneを割り当てることができません:「m1.user」はnull値を許可しません」というエラーが発生しました。テーブルを削除してsyncdbで作成すれば、すべてがうまくいくことを知っています。Southのような移行ツールを使用すれば、それも問題ありません。しかし、私はこれの仕組みを理解し、dbの何が問題になっているのかを知りたいと思います。

'manage.py sqlall app'を呼び出すと、'CREATE TABLE'に通知され、インデックスが作成されます。

CREATE INDEX `app_m1_a703c35a` ON `app_m1` (`user_id`);

ALTER TABLE `app_m1` ADD CONSTRAINT `user_id_refs_id_5b1b34cc` 
FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`);

わかりました。phpmyadminにアクセスしてこのSQLを実行します(率直に言って、これらのインデックスが何をするのかわかりません)。ただし、エラーは引き続き発生します。私は何をすべきか?

4

1 に答える 1

0

まず、South を使用してこれらのデータベースの移行を行う必要があります。特に、何が起こっているのか本当に理解していないことを認めているためです。

第二に、エラーはそれが欠落しているからではなく、欠落blank=Trueしているからnull=Trueであり、これはまったく別のものです。ドキュメントはこれをよく説明しています。

于 2012-08-07T15:57:58.370 に答える