web-dev-qa-db-ja.com

Django migrate:テーブルを作成しません

いくつかのエラーの後、データベースをドロップし、すべての移行ファイルを削除しました(init。pyを残しました)。今、私が実行すると

python migrate.py makemigrations   // It creates migrations correctly
python migrate.py migrate          // It outputs "app.0001_initial OK"

しかし、絶対に[〜#〜] no [〜#〜]table(私のアプリに関連)はcreatedです。 Django=に関連するもののみです。移行テーブルでは、アプリケーションの移行が完了しているとマークされていますが、私が言ったようにテーブルは作成されていません。

移行ファイルの抜粋を次に示します。

# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2016-02-18 21:59
from __future__ import unicode_literals

import colorful.fields
import Django.core.validators
from Django.db import migrations, models
import Django.db.models.deletion


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Client',
            fields=[
                ('id', models.AutoField(db_column='idtblclients', primary_key=True, serialize=False)),
                ('genre1', models.CharField(blank=True, max_length=10)),
            ('prenom1', models.CharField(blank=True, max_length=45)),
            ('nom1', models.CharField(blank=True, max_length=45)),
            ('genre2', models.CharField(blank=True, max_length=10)),
            ('prenom2', models.CharField(blank=True, max_length=45)),
            ('nom2', models.CharField(blank=True, max_length=45)),
            ('courriel', models.CharField(blank=True, max_length=45)),
            ('langue', models.CharField(blank=True, max_length=1)),
            ('numtel1', models.CharField(blank=True, db_column='NumTel1', max_length=20)),
            ('numtel2', models.CharField(blank=True, db_column='NumTel2', max_length=20)),
            ('numcivique', models.CharField(blank=True, db_column='NumCivique', max_length=15)),
            ('rue', models.CharField(blank=True, db_column='Rue', max_length=45)),
            ('ville', models.CharField(blank=True, db_column='Ville', max_length=45)),
            ('codepostal', models.CharField(blank=True, db_column='CodePostal', max_length=45)),
            ('timestamp', models.DateTimeField(blank=True, db_column='Timestamp', null=True)),
            ('zone', models.CharField(blank=True, db_column='Zone', max_length=45)),
        ],
        options={
            'db_table': 'tblclients',
            'managed': False,
        },
    ),
....

修正方法はありますか?

18
Adam Cherti

From Django docs、 Options.managed : "Falseの場合、このモデルに対してデータベーステーブルの作成または削除操作は実行されません。"

そして、私はあなたが持っているのを見ます

   options={
        'db_table': 'tblclients',
        'managed': False,
    },

モデルにmanaged=Trueを設定してみてください。

19
JulienD
python manage.py migrate --fake APPNAME zero

これにより、フェイクへの移行が行われます。これで、移行スクリプトを実行できます

python manage.py migrate APPNAME

テーブルが作成され、問題を解決しました。

34
Vignesh

私の場合、テーブルを作成したのは次のとおりです。

python manage.py migrate --run-syncdb

Django 1.9.6。

8

私は同じ問題に直面しています:

python manage.py migrate poll
Operations to perform:
  Apply all migrations: poll
Running migrations:
  No migrations to apply.

アプリのテーブルを作成するには、次の手順に従います。

アプリフォルダーに移動します

1.移行フォルダを削除します。

2.python manage.py makemigrations。

3 0001_initial.pyファイルの名前を0001_initial_manual.pyに変更します。

4 python manage.py migrate APPNAME。

この後、私のテーブルはスムーズに作成されました。

python manage.py migrate poll
Operations to perform:
  Apply all migrations: poll
Running migrations:
  Applying poll.0002_initial... OK
2
Rajiv Sharma

プロジェクトで複数のデータベースを使用しているかどうかを確認してください。複数のデータベースが構成されている場合は、デフォルトのデータベースが探しているものであることを確認してください。

デフォルトと予想されるデータベースが異なる場合は、db構成を指す以下のコマンドを実行します。

python manage.py migrate $ app_name --database $ dbname_from_setting

お役に立てれば。

1
Durai

これは私が@JulienDの答えを得る方法です:

  1. Models.pyのモデル定義にメタデータを追加しました:

class thing(models.Model): name = models.CharField(max_length=200) class Meta: app_label = 'things' managed = True

  1. 実行:

python manage.py makemigrations

  1. 実行:

python manage.py migrate

その後 python manage.py showmigrationsは移行を示し、管理サイトが機能し始めました。

0
Geordie

これに対する答えは、アプリフォルダーに移行の履歴があるかどうかによって異なります。私の場合、私はしませんでした...元の移行スクリプトを削除したと思います。

だからDjangoのドキュメントに従って、私は次のことをしました:

  1. Models.pyの新しい更新をコメントアウトします
  2. セクションをフォロー アプリへの移行の追加 ...
  3. 既存のものの移行を作成します。

    python manage.py makemigrations yourapp

  4. これらの移行の偽の適用を行います(テーブルが既に存在し、再作成を試みないシングルの下):

    python manage.py migrate --fake-initial

  5. Model.pyの変更をコメント解除します
  6. セクションの手順に従ってください ワークフロー ...

    python manage.py makemigrations yourapp

    python manage.py migrate

0
Doug Nintzel