Подтвердить что ты не робот

Django migrate: не создает таблицы

После некоторых ошибок я удалил свою базу данных, удалил все мои файлы миграции (я оставил init.py). Теперь, когда я запускаю

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

Но абсолютно НЕТ таблица (связанная с моим приложением) создана. Только те, которые связаны с джанго. И в таблице миграции моя миграция приложений отмечена, но таблица не была создана, как я уже сказал, это очень неприятно.

Вот выдержка моего файла миграции:

# -*- 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,
        },
    ),
....

У вас есть идея, как его исправить?

4b9b3361

Ответ 1

Из Django docs Options.managed: "Если False, для этой модели не будут созданы операции создания или удаления таблицы базы данных".

И я вижу, что вы

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

Попробуйте установить managed=True в модели.

Ответ 2

python manage.py migrate --fake APPNAME zero

Это сделает вашу миграцию подделкой. Теперь вы можете запустить миграцию script

python manage.py migrate APPNAME

Будут созданы таблицы и вы решили свою проблему.. Приветствия!

Ответ 3

В моем случае, что создало таблицы, было следующее:

python manage.py migrate --run-syncdb

Я использую Django 1.9.6.

Ответ 4

У меня такая же проблема:

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 перенести APPNAME.

После этого мои таблицы создавались плавно.

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

Ответ 5

Пожалуйста, проверьте, если вы используете несколько баз данных в вашем проекте. Если настроено несколько баз данных, убедитесь, что база данных по умолчанию - это та, которую вы ищете.

Если значения по умолчанию и ожидаемая база данных отличаются, выполните команду ниже, указав на вашу конфигурацию базы данных.

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

Надеюсь это поможет.

Ответ 6

Вот как я получил ответ @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 показывает миграции, и сайт администратора начал работать.

Ответ 7

Ответ зависит от того, есть ли у вас история миграций в папке вашего приложения. В моем случае я не... Я думаю, что удалил оригинальные сценарии миграции.

Следуя документации 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 перенести

Ответ 8

Перейдите в свою базу данных и удалите все миграции для этого приложения, возможно, вам придется удалить соответствующие таблицы.

postgres=# \c db_yourdb
db_yourdb=# delete from django_migrations where app='appName';

затем перейдите к своему коду и;

(venv)[email protected]:~/Desktop/project$ python manage.py makemigrations appName
(venv)[email protected]:~/Desktop/project$ python manage.py migrate appName

Чтобы полностью выполнить новую миграцию, сначала выполните необходимые удаления для миграции и, при необходимости, удалите таблицы;

(venv)[email protected]:~/Desktop/project$ find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
(venv)[email protected]:~/Desktop/project$ find . -path "*/migrations/*.pyc"  -delete

наконец-то;

(venv)[email protected]:~/Desktop/project$ python manage.py makemigrations
(venv)[email protected]:~/Desktop/project$ python manage.py migrate

Узнайте больше о том, как сбросить миграцию

Ответ 9

Удалите миграции папок и повторно запустите. Меня устраивает