web-dev-qa-db-fra.com

Django - aucune exception de table de ce type

Dans Django, j'ai ajouté quelques modèles dans models.py. Après manage.py makemigrations, manage.py migrate a soulevé cette exception:

Django.db.utils.OperationalError: no such table: auth_test_usertranslatorprofile

J'ai donc supprimé toutes les anciennes migrations et exécuté à nouveau makemigrations et migrate qui semblait fonctionner.

Malheureusement, j'ai remarqué que cela n'a pas aidé car lorsque j'essaie de cliquer sur User customer profiles de User translator profiles cela soulève une exception:

Environnement:

Request Method: GET
Request URL: http://127.0.0.1:8000/admin/auth_test/usertranslatorprofile/

Django Version: 1.8.7
Python Version: 2.7.10
Installed Applications:
('Django.contrib.admin',
 'Django.contrib.auth',
 'Django.contrib.contenttypes',
 'Django.contrib.sessions',
 'Django.contrib.messages',
 'Django.contrib.staticfiles',
 'auth_test')
Installed Middleware:
('Django.contrib.sessions.middleware.SessionMiddleware',
 'Django.middleware.common.CommonMiddleware',
 'Django.middleware.csrf.CsrfViewMiddleware',
 'Django.contrib.auth.middleware.AuthenticationMiddleware',
 'Django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'Django.contrib.messages.middleware.MessageMiddleware',
 'Django.middleware.clickjacking.XFrameOptionsMiddleware',
 'Django.middleware.security.SecurityMiddleware')


Traceback:
File "C:\Python27\lib\site-packages\Django\core\handlers\base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Python27\lib\site-packages\Django\contrib\admin\options.py" in wrapper
  618.                 return self.admin_site.admin_view(view)(*args, **kwargs)
File "C:\Python27\lib\site-packages\Django\utils\decorators.py" in _wrapped_view
  110.                     response = view_func(request, *args, **kwargs)
File "C:\Python27\lib\site-packages\Django\views\decorators\cache.py" in _wrapped_view_func
  57.         response = view_func(request, *args, **kwargs)
File "C:\Python27\lib\site-packages\Django\contrib\admin\sites.py" in inner
  233.             return view(request, *args, **kwargs)
File "C:\Python27\lib\site-packages\Django\utils\decorators.py" in _wrapper
  34.             return bound_func(*args, **kwargs)
File "C:\Python27\lib\site-packages\Django\utils\decorators.py" in _wrapped_view
  110.                     response = view_func(request, *args, **kwargs)
File "C:\Python27\lib\site-packages\Django\utils\decorators.py" in bound_func
  30.                 return func.__get__(self, type(self))(*args2, **kwargs2)
File "C:\Python27\lib\site-packages\Django\contrib\admin\options.py" in changelist_view
  1550.                 self.list_max_show_all, self.list_editable, self)
File "C:\Python27\lib\site-packages\Django\contrib\admin\views\main.py" in __init__
  82.         self.get_results(request)
File "C:\Python27\lib\site-packages\Django\contrib\admin\views\main.py" in get_results
  177.         result_count = paginator.count
File "C:\Python27\lib\site-packages\Django\core\paginator.py" in _get_count
  72.                 self._count = self.object_list.count()
File "C:\Python27\lib\site-packages\Django\db\models\query.py" in count
  318.         return self.query.get_count(using=self.db)
File "C:\Python27\lib\site-packages\Django\db\models\sql\query.py" in get_count
  466.         number = obj.get_aggregation(using, ['__count'])['__count']
File "C:\Python27\lib\site-packages\Django\db\models\sql\query.py" in get_aggregation
  447.         result = compiler.execute_sql(SINGLE)
File "C:\Python27\lib\site-packages\Django\db\models\sql\compiler.py" in execute_sql
  840.             cursor.execute(sql, params)
File "C:\Python27\lib\site-packages\Django\db\backends\utils.py" in execute
  79.             return super(CursorDebugWrapper, self).execute(sql, params)
File "C:\Python27\lib\site-packages\Django\db\backends\utils.py" in execute
  64.                 return self.cursor.execute(sql, params)
File "C:\Python27\lib\site-packages\Django\db\utils.py" in __exit__
  98.                 six.reraise(dj_exc_type, dj_exc_value, traceback)
File "C:\Python27\lib\site-packages\Django\db\backends\utils.py" in execute
  64.                 return self.cursor.execute(sql, params)
File "C:\Python27\lib\site-packages\Django\db\backends\sqlite3\base.py" in execute
  318.         return Database.Cursor.execute(self, query, params)

Exception Type: OperationalError at /admin/auth_test/usertranslatorprofile/
Exception Value: no such table: auth_test_usertranslatorprofile

J'attache mes fichiers:

MODELS.PY:

from Django.db import models
from Django.contrib.auth.models import User

class Language(models.Model):
    shortcut = models.CharField(max_length=6)
    name = models.CharField(max_length=50)
    price_per_sign = models.FloatField()

class UserTranslatorProfile(models.Model):
    user = models.OneToOneField(User)
    languages = models.ManyToManyField(Language)
    price_per_Word = models.FloatField()

class UserCustomerProfile(models.Model):
    user = models.OneToOneField(User)

ADMIN.PY:

from Django import forms
from .models import Language
from Django.contrib.auth.models import User
from Django.contrib.auth.forms import UserCreationForm
class FreelancerRegistrationForm(forms.Form):
    language = forms.ModelChoiceField(queryset=Language.objects.all().order_by('shortcut'))

Savez-vous où est le problème? Merci

10
Milano

J'ai résolu le même problème avec ces étapes:

  • Supprimez votre base de données (db.sqlite3 dans mon cas) dans le répertoire de votre projet
  • Supprimer tout de __pycache__ dossier dans le sous-répertoire de votre projet
  • Pour l'application que vous essayez de corriger, accédez au dossier et désactivez migrations et __pycache__ répertoires

Lorsque vous êtes sûr d'avoir effacé tous les fichiers ci-dessus, exécutez:

python manage.py makemigrations
python manage.py migrate

J'espère que ça aide.

41
aks

Un autre cas qui peut générer l'erreur pas une telle table. Si votre views.py ou similaire exécute du code qui tente d'accéder à la base de données lors de son importation, c'est-à-dire que l'importation de views.py a des effets secondaires, alors partir de zéro ne fonctionnera pas.

Cela se produit lorsque votre code fonctionnait avec une base de données existante et que vous essayez maintenant de démarrer sans base de données. Modifiez simplement views.py pour qu'il puisse être importé sans effets secondaires. Si vous ne voulez pas corriger la conception, faites quelque chose comme:

from Django.db.utils import OperationalError
format_list = [('', '(all)')]
geom_type_list = [('', '(all)')]
try:
    format_list.extend([(i[0],i[0]) 
        for i in Format.objects.values_list('name')])
    geom_type_list.extend([(i[0],i[0]) 
        for i in Geom_type.objects.values_list('name')])
except OperationalError:
    pass  # happens when db doesn't exist yet, views.py should be
          # importable without this side effect
21
Terry Brown

Ajoutant à la réponse de terry_brown, c'est ce qui cause mes problèmes. J'avais un modèle d'utilisateur personnalisé avec ForeignKey vers un autre modèle. Et j'ai défini par défaut le premier objet dans la base de données. Cela a fonctionné lorsque j'avais les données dans la base de données. Mais quand j'ai commencé à zéro, cela n'a pas fonctionné car il a été exécuté immédiatement lors de l'importation (donc même la migration n'a pas été effectuée).

class User(AbstractBaseUser, PermissionsMixin):
    subscription_plan = models.ForeignKey(SubscriptionPlan, default=SubscriptionPlan.objects.first().id)

J'ai dû sacrifier ça default (en le commentant).

MISE À JOUR: Une meilleure solution serait de préremplir votre base de données avec la migration initiale ou les fixtures.

6
kotrfa

exécuter la commande ci-dessous. Il me résout une fois ce problème

manage.py migrate --run-syncdb

1
bappi

Pour le résoudre, j'ai fait cela (sur Ubuntu, vous devrez adapter les commandes pour Windows):

1. Supprimez tous les fichiers de migration

find . -path "*/migrations/*.py" -not -name "__init__.py" -delete

find . -path "*/migrations/*.pyc"  -delete

2. Supprimer db.sqlite3

rm db.sqlite3

3. Créez et exécutez les migrations:

python manage.py makemigrations
python manage.py migrate

4. Synchronisez la base de données:

manage.py migrate --run-syncdb

Un peu pénible car vous devez supprimer votre base de données, mais très bien pour un système de test. Vous avez tout sauf l'étape finale de cette ressource généralement excellente: https://simpleisbetterthancomplex.com/tutorial/2016/07/26/how-to-reset-migrations.html

0
adam

Peut-être hors du temps mais ... J'ai le même problème quand j'ai essayé de "cloner" Django 1.11 installation dans un autre répertoire puis avec un premier essai de gestion des makemigrations.

Je résous le problème de la manière suivante:

  1. settup initial Django installation et création de l'application principale par:

Django-admin.py startproject nom_app

  1. migrations initiales gérer les migrations, gérer la migration

  2. Configurez le superutilisateur:

gérer crée un superutilisateur

  1. copier tous les fichiers et répertoires (applications Django) sauf les urls.py et settings.py dans le répertoire principal

  2. Ajout de toutes les applications dans INSTALLED_APPS

  3. gérer les migrations, gérer la migration

  4. Paramètres.py et urls.py copiés depuis la source Django

Ce n'est pas une erreur et tout fonctionne bien.

Petr

0
Petr

Si quelqu'un d'autre a ce problème et que la solution acceptée ne fonctionne pas, consultez votre chemin db, le chemin db doit être un chemin absolu, 'NAME': '/pathto-db/default.db',

Lien

0
Batman