2016-05-04 15 views
0

私のdbのすべてのテーブルにこの行があります。私はdjango 1.8を使用しています。Django:外部キーからユーザへのエラー

pub_date = models.DateTimeField(default=datetime.datetime.now) 
author = models.ForeignKey(settings.AUTH_USER_MODEL) 

以下のコードも試しましたが、同じエラーが表示されます。

author = models.ForeignKey(User) 

これは、syncdbを使用して端末に表示されます。

​​は、私のdbの名前です。

C:\Python27\Lib\site-packages\django\core\management\commands\syncdb.py:24: Remo 
vedInDjango19Warning: The syncdb command will be removed in Django 1.9 
    warnings.warn("The syncdb command will be removed in Django 1.9", RemovedInDja 
ngo19Warning) 

Operations to perform: 
    Synchronize unmigrated apps: chartit, pagination, staticfiles, autocomplete_li 
ght, messages, bootstrap3_datetime, eReg, crispy_forms, bootstrap3 
    Apply all migrations: admin, contenttypes, auth, sessions 
Synchronizing apps without migrations: 
    Creating tables... 
    Creating table eReg_demographic 
    Creating table eReg_icd_10 
    Creating table eReg_pregnancy 
    Creating table eReg_diagnosis 
    Creating table eReg_clinical_data 
    Creating table eReg_clinical_data_two 
    Creating table eReg_a_b_sickle_thal 
    Creating table eReg_redcell_enzyme_dis 
    Creating table eReg_redcell_membrane_dis 
    Creating table eReg_cong_dyseryth_anaemia 
    Creating table eReg_ext_centers 
    Running deferred SQL... 
Traceback (most recent call last): 
    File "manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "C:\Python27\Lib\site-packages\django\core\management\__init__.py", line 
338, in execute_from_command_line 
    utility.execute() 
    File "C:\Python27\Lib\site-packages\django\core\management\__init__.py", line 
330, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "C:\Python27\Lib\site-packages\django\core\management\base.py", line 390, 
in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "C:\Python27\Lib\site-packages\django\core\management\base.py", line 441, 
in execute 
    output = self.handle(*args, **options) 
    File "C:\Python27\Lib\site-packages\django\core\management\commands\syncdb.py" 
, line 25, in handle 
    call_command("migrate", **options) 
    File "C:\Python27\Lib\site-packages\django\core\management\__init__.py", line 
120, in call_command 
    return command.execute(*args, **defaults) 
    File "C:\Python27\Lib\site-packages\django\core\management\base.py", line 441, 
in execute 
    output = self.handle(*args, **options) 
    File "C:\Python27\Lib\site-packages\django\core\management\commands\migrate.py 
", line 179, in handle 
    created_models = self.sync_apps(connection, executor.loader.unmigrated_apps) 

    File "C:\Python27\Lib\site-packages\django\core\management\commands\migrate.py 
", line 317, in sync_apps 
    cursor.execute(statement) 
    File "C:\Python27\Lib\site-packages\django\db\backends\utils.py", line 79, in 
execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "C:\Python27\Lib\site-packages\django\db\backends\utils.py", line 64, in 
execute 
    return self.cursor.execute(sql, params) 
    File "C:\Python27\Lib\site-packages\django\db\utils.py", line 97, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "C:\Python27\Lib\site-packages\django\db\backends\utils.py", line 62, in 
execute 
    return self.cursor.execute(sql) 
    File "C:\Python27\Lib\site-packages\django\db\backends\mysql\base.py", line 12 
4, in execute 
    return self.cursor.execute(query, args) 
    File "C:\Python27\Lib\site-packages\MySQLdb\cursors.py", line 174, in execute 
    self.errorhandler(self, exc, value) 
    File "C:\Python27\Lib\site-packages\MySQLdb\connections.py", line 36, in defau 
lterrorhandler 
    raise errorclass, errorvalue 
django.db.utils.OperationalError: (1005, "Can't create table 'cy_thal.#sql-f8c_9 
' (errno: 150)") 

これを修正する方法はありますか?

ありがとうございます!

+0

詳細については、エラーに記載されているコードを使用してください。http://stackoverflow.com/questions/4063141/mysql-foreign-key-error-1005-errno-150 and http:// stackoverflow .com/questions/9018584 /エラーコード-1005-cant-create-table-errno-150。 MySQLはFK制約を設定するためにインデックスを必要としますが、どちらか一方が自動的に作成されていない可能性があります。 – Pawamoy

+0

@Pawamoyそして、これをDjangoのmodels.pyからどうやって行えますか? – zinon

+1

'./manage.py migrate'の前に' ./manage.py migrate auth'を実行しようとしましたか?場合によっては、 'auth'アプリを他のアプリに移行する必要があります。 – Pawamoy

答えて

0

場合によっては、authアプリは、他のアプリの前に移行する必要があります。これは、すべてのアクセス許可を生成するためです。他のモデルの外部キー制約の設定に必要な非常に頻繁に使用されるモデルUserのインデックスもあります。

実行./manage.py migrate authを入力すると、標準./manage.py migrateを実行できるはずです。

0

どのエラーが間違っているかは完全にはわかりませんが、次は試してみます。モデルへの変更を行った後

は、これらの行を実行します。エラーが残っている場合
python manage.py makemigrations appname
python manage.py migrate appname

は、試してみてください。 python manage.py syncdb

EDITを:ダニエル・ローズマンが示唆したように、私は私の答えを編集しました。 Django 1.8は移行をサポートしています。南を使う必要はありません。

+0

'schemamigration'はサポートされていません。 – zinon

+0

OK、私のソリューションを使用するには、southをインストールする必要があります。 Southは、モデルを修正するときにデータベース構造を変更するために使用されるDjangoアプリです。本当に便利です。 – gurok19

+0

を南にインストールする:1.pip install south、2. INSTALLED_APPSに追加する、3. manage.py syncdb。 – gurok19