5

Khi tôi chạydjango.db.migrations.exceptions.InconsistentMigrationHistory

python manage.py migrate 

về dự án django của tôi, tôi nhận được lỗi sau

Traceback (most recent call last): 
File "manage.py", line 22, in <module> 
execute_from_command_line(sys.argv) 
File "/home/hari/project/env/local/lib/python2.7/site-  packages/django/core/management/__init__.py", line 363, in execute_from_command_line 
utility.execute() 
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 355, in execute 
self.fetch_command(subcommand).run_from_argv(self.argv) 
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 283, in run_from_argv 
self.execute(*args, **cmd_options) 
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 330, in execute 
output = self.handle(*args, **options) 
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 86, in handle 
executor.loader.check_consistent_history(connection) 
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/db/migrations/loader.py", line 298, in check_consistent_history 
connection.alias, 
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency account.0001_initial on database 'default'. 

Tôi có một mô hình người dùng như dưới đây

class User(AbstractUser): 
place = models.CharField(max_length=64, null=True, blank=True) 
address = models.CharField(max_length=128, null=True, blank=True) 

Vậy làm cách nào tôi có thể giải quyết vấn đề này?

+0

trước hết là xóa tất cả các bảng biểu từ các cơ sở dữ liệu, xóa tất cả các file từ thư mục di cư ngoại trừ init.py sau đó chạy di chuyển – Exprator

+0

làm thế nào để xóa tất cả các bảng? –

+0

bạn đang sử dụng db nào? – Exprator

Trả lời

1

Trước hết xóa tất cả các bảng khỏi cơ sở dữ liệu, xóa tất cả các tệp khỏi thư mục di chuyển ngoại trừ __init__.py rồi chạy di chuyển.

+1

Điểm di chuyển là bạn không muốn xóa dữ liệu của bạn nhưng giữ chúng. Vì vậy, xóa chỉ là một giải pháp nếu bạn không có dữ liệu quan trọng trong cơ sở dữ liệu hoặc nếu bạn có thể lưu và khôi phục chúng e. g. với dumpdata.Nhưng vấn đề là sơ đồ db đã thay đổi, nếu không sẽ không có di chuyển. –

5

Bảng django_migrations trong cơ sở dữ liệu của bạn là nguyên nhân của sự không thống nhất và xóa tất cả các di chuyển chỉ từ đường dẫn cục bộ sẽ không hoạt động.

Bạn phải cắt bớt bảng django_migrations khỏi cơ sở dữ liệu của mình và sau đó thử áp dụng lại di chuyển. Nó sẽ làm việc, nhưng nếu nó không chạy lại một lần nữa và sau đó di chuyển.

Lưu ý: đừng quên sao lưu dữ liệu của bạn.

2

Trong cuộc di cư của bạn thư mục bên trong dự án:

  1. Xóa _pycache_ và các tập tin 0001_initial.
  2. Xóa db.sqlite3 khỏi thư mục gốc (hãy cẩn thận tất cả dữ liệu của bạn sẽ biến mất).
  3. trên đường chạy trốn bị đầu cuối:
      python makemigrations manage.py
      python manage.py di chuyển
0

Đầu tiên xóa tất cả các cuộc di cư và các tập tin db.sqlite3 và làm theo các bước sau:

$ ./manage.py makemigrations myapp 
$ ./manage.py squashmigrations myapp 0001(may be differ) 

Xóa tệp di chuyển cũ và cuối cùng.

$ ./manage.py migrate 
8

Vì bạn đang sử dụng một mô hình tùy chỉnh tài khoản, đầu tiên bạn có thể nhận xét ra

INSTALLED_APPS = [ 
... 
#‘django.contrib.admin’, 
... 
] 

trong cài đặt Installed_Apps của bạn. Sau đó chạy

python manage.py migrate. 

Khi thực hiện bỏ ghi chú

‘django.contrib.admin’.