it-swarm.dev

Django manage.py: Bağımlılığından önce öncelikli göç

python manage.py migrate çalıştırırken bu hatayla karşılaşıyorum:

Django.db.migrations.exceptions.InconsistentMigrationHistory: Migration
<appname>.0016_auto_<date2>_<time2> is applied before its dependency
<appname>.0001_squashed_0015_auto_<date1>_<time1>

çalışan showmigrations iadeleri:

<appname>
 [X] 0001_squashed_0015_auto_<date1>_<time1> (15 squashed migrations)
 [X] 0016_auto_<date2>_<time2>
 [ ] 0017_<modelname>_squashed_0019_auto_<date3>_<time3> (3 squashed migrations)

Dün Django eklentilerini deniyordum, bazı doğrudan SQL sorguları yürüttükten sonra her şey berbatlaştığında ve git'i kullanarak zor sıfırladım. Hala göçler hakkında öğreniyorum, bu yüzden neyin yanlış olduğunu anlamıyorum, çünkü bana her iki göçmenin de zaten uygulanmış olduğu görünüyor.

Yardımın için teşekkürler!

15

Geçişleri ezdiniz, bu nedenle 0016_auto_<date2>_<time2> öğesinin sahip olduğu bağımlılıklardan biri şimdi yeni oluşturulan ezilmiş geçişlerin bir parçası. Bu arada 0016_auto_<date2>_<time2> zaten çalıştırıldı ve şimdi ezilmiş göçü çalıştırmaya çalışıyorsunuz. 

Bunu otomatik olarak düzeltmenin bir yolu olup olmadığını şahsen bilmiyorum. Sorunları kendiniz düzeltmeniz gerekecek. Sürüm kontrolünüz varsa, bu değişiklikleri geri alın ve eskileri etkilemeden geçişi nasıl ezmeniz gerektiğini yeniden düşünün. 

8
masnun
  1. Çakışan geçişin bağımlılıklarını düzenleyin, böylece uygulanmış olan geçişe artık başvuru yapmaz.
  2. Ardından python manage.py 'yi tekrar çalıştırın ve taşınması gerekir.

    • Uyarı: bu yalnızca veritabanının durumunun, çakışan geçişi uyguladığınız durumla eşleştiğini varsayarak çalışır.
0
Duilio

bunu çalıştır python manage.py dbshell

INSERT INTO public.Django_migrations(app, name, applied)
VALUES ('YOUR_APP_NAME, '0017_<modelname>_squashed_0019_auto_<date3>_<time3>', now());

ve iyi olmalısın. Geçişiniz veritabanına çok değişiyorsa, korkarım bunu düzeltmek o kadar kolay olmayacak.

0
test30

Bu benim için çalıştı. İş arkadaşıma bu bilgiyi paylaştığım için saatlerce çevrimiçi aradıktan sonra teşekkür ediyorum.

Db Shell'inizi başlatın

python manage.py dbshell

İstediğiniz veritabanını kullanın. Eğer bilmiyorsanız, "veritabanı göster"

mysql>use <database_name>;

Uygulamanızın altındaki tüm taşıma işlemlerini alın

mysql> select * from Django_migrations where app='<app>';

Çıktıyı tüm geçişlerin yanında kimlikleriyle göreceksiniz. Bırakmak istediğiniz göçe bakın. Kimliğin 361 olduğunu söyle.

mysql> delete from Django_migrations where id=361;
0
user3661888