web-dev-qa-db-fra.com

Django migrate: ne crée pas de tables

Après quelques erreurs, j'ai lâché ma base de données, supprimé tous mes fichiers de migration (j'ai laisséinit .py) . Maintenant, quand je lance

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

Mais absolumentNO table (liée à mon application) est créée . Seuls ceux liés à Django sont . Et dans la table de migration, la migration de mes applications est marquée est terminée mais aucune table n'a été créée comme je l'ai dit, c'est très déplaisant.

Voici un extrait de mon fichier de migration:

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

Avez-vous une idée comment résoudre ce problème?

13
Adam Cherti

Dans Django docs, Options.managed : "Si la valeur est False, aucune opération de création ou de suppression de table de base de données ne sera effectuée pour ce modèle."

Et je vois que tu as 

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

Essayez de définir managed=True dans le modèle.

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

Cela rendra votre migration fausse . Maintenant, vous pouvez exécuter le script migrate

python manage.py migrate APPNAME

Des tables seront créées Et vous aurez résolu votre problème.

23
Vignesh

Dans mon cas, ce qui a créé les tables était ceci:

python manage.py migrate --run-syncdb

J'utilise Django 1.9.6.

5
Roddy P. Carbonell

Veuillez vérifier si vous utilisez plusieurs bases de données dans votre projet. Si plusieurs bases de données sont configurées, vérifiez que la base de données par défaut est celle que vous recherchez.

Si default et la base de données attendue sont différents, exécutez la commande ci-dessous en indiquant votre configuration de base de données.

python manage.py migrate $ nom_app --database $ nom_base_de_fichier

J'espère que cela t'aides.

1
Durai

Je suis confronté au même problème:

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

Suivez ces étapes pour créer des tableaux pour votre application.

Allez dans le dossier de votre application

Dossier de migration 1.delete.

2.python manage.py makemigrations.

3 Renommez le fichier 0001_initial.py en 0001_initial_manual.py.

4 python manage.py migrer APPNAME.

Après cela, mes tables ont été créées en douceur.

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

Voici comment j'ai obtenu la réponse de @JulDD:

  1. J'ai ajouté des métadonnées à ma définition de modèle dans models.py:

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

  1. Exécuter:

python manage.py makemigrations

  1. Exécuter:

python manage.py migrate

Après cela, python manage.py showmigrations affiche les migrations et le site d'administration a commencé à fonctionner.

0
Geordie