Lorsque je faisais du développement Web avec Django, l'erreur de migration a pris un certain temps, je vais donc laisser les détails sur la façon dont je l'ai traitée.
Mac Catalina 10.15.6 Python 3.7 PostgreSQL 10.14 Django 2.2.2
Migration
makemigrations
$ python manage.py makemigrations
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency user.0001_initial on database 'default'
L'erreur semble se produire si vous effectuez python manage.py makemigrations
une seule fois avant d'appliquer le modèle CustomUser ...
migrate
$ python manage.py migrate
RuntimeError: Model class django.contrib.sites.models.Site doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
Bien sûr, migrate
ne fonctionnait pas non plus.
$ python manage.py showmigrations
Si vous obtenez une erreur avec cela, cela signifie que vous n'avez pas pu migrer en premier lieu.
Tout d'abord, supprimez tous les fichiers autres que «__init __. Py» directement sous «migrations» de chaque application.
Puis commentez la partie'django.contrib.admin'part en haut de INSTALLED_APPS dans settings.py.
#***** settings.py ********
$ INSTALLED_APPS = [
# 'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'accounts'
]
AUTH_USER_MODEL = 'accounts.CustomUser'
De plus, commentez la partie admin de ʻurl patterns dans ʻurls.py
.
#***** urls.py *******
from django.contrib import admin
from django.urls import path
from django.urls.conf import include
urlpatterns = [
# path('admin/', admin.site.urls),
]
Maintenant, faisons migrer
une fois. Espérons que cela passera.
De la même manière que [Action 1](## Action 1), supprimez tous les fichiers autres que «__init __. Py» directement sous «migrations» de chaque application.
En fait, je n'ai pas pu corriger l'erreur avec [Action 1](## Action 1), donc j'ai réussi à faire des migrations et à migrer en reconstruisant la base de données de cette manière.
Ici, postgresql @ 10
est utilisé.
$ psql -l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access
| privileges
---------------+---------+----------+-------------+-------------+---------
postgres | kanzaki | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
app_name | kanzaki | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | kanzaki | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/kanzaki +
| | | | | kanzaki=CTc/
| | | | | kanzaki
template1 | kanzaki | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/kanzaki +
| | | | | kanzaki=CTc/
| | | | | kanzaki
(4 rows)
$ dropdb app_name
$ psql -l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access
| privileges
---------------+---------+----------+-------------+-------------+---------
postgres | kanzaki | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | kanzaki | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/kanzaki +
| | | | | kanzaki=CTc/
| | | | | kanzaki
template1 | kanzaki | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/kanzaki +
| | | | | kanzaki=CTc/
| | | | | kanzaki
(3 rows)
$ brew services start postgresql@10
$ create app_name
makemigrations & migrate $ python manage.py migrate Operations to perform: Apply all migrations: account, accounts, admin, auth, contenttypes, diary, sessions, sites Running migrations: Applying contenttypes.0001_initial... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0001_initial... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying accounts.0001_initial... OK Applying account.0001_initial... OK Applying account.0002_email_max_length... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying diary.0001_initial... OK Applying sessions.0001_initial... OK Applying sites.0001_initial... OK Applying sites.0002_alter_domain_unique... OK Avez-vous réussi?
Cette fois, j'ai résumé une partie de l'article dans laquelle j'étais vraiment en train de développer le Web avec Django. J'ai pu migrer en reconstruisant la base de données, mais je l'ai écrite car il n'y avait pas beaucoup d'articles qui montraient cette méthode. Je voulais vous faire savoir que cette méthode peut également être résolue.
Django utilise toujours le modèle CustomUser! Parler Que faire si la migration de l'utilisateur personnalisé Django échoue
Recommended Posts