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
J'ai résolu le même problème avec ces étapes:
db.sqlite3
dans mon cas) dans le répertoire de votre projet__pycache__
dossier dans le sous-répertoire de votre projetmigrations
et __pycache__
répertoiresLorsque 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.
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
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.
exécuter la commande ci-dessous. Il me résout une fois ce problème
manage.py migrate --run-syncdb
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
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:
Django-admin.py startproject nom_app
migrations initiales gérer les migrations, gérer la migration
Configurez le superutilisateur:
gérer crée un superutilisateur
copier tous les fichiers et répertoires (applications Django) sauf les urls.py et settings.py dans le répertoire principal
Ajout de toutes les applications dans INSTALLED_APPS
gérer les migrations, gérer la migration
Paramètres.py et urls.py copiés depuis la source Django
Ce n'est pas une erreur et tout fonctionne bien.
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',