Seperti judulnya, sepertinya saya tidak bisa membuat migrasi berfungsi.
Aplikasi ini awalnya di bawah 1,6, jadi saya mengerti bahwa migrasi tidak akan ada di sana pada awalnya, dan memang jika saya menjalankan python manage.py migrate
saya mendapatkan:
Operations to perform:
Synchronize unmigrated apps: myapp
Apply all migrations: admin, contenttypes, auth, sessions
Synchronizing apps without migrations:
Creating tables...
Installing custom SQL...
Installing indexes...
Running migrations:
No migrations to apply.
Jika saya melakukan perubahan pada model apa pun myapp
, masih dikatakan tidak bermigrasi, seperti yang diharapkan.
Tetapi jika saya menjalankan python manage.py makemigrations myapp
saya mendapatkan:
No changes detected in app 'myapp'
Tampaknya tidak masalah apa atau bagaimana saya menjalankan perintah, itu tidak pernah mendeteksi aplikasi memiliki perubahan, juga tidak menambahkan file migrasi ke aplikasi.
Apakah ada cara untuk memaksa aplikasi ke migrasi dan pada dasarnya mengatakan "Ini basis saya untuk bekerja dengan" atau apa? Atau apakah saya melewatkan sesuatu?
Basis data saya adalah PostgreSQL jika itu membantu.
sumber
Jawaban:
Jika Anda mengubah dari aplikasi yang ada yang Anda buat di Django 1.6, maka Anda perlu melakukan satu pra-langkah (seperti yang saya ketahui) yang tercantum dalam dokumentasi:
Dokumentasi tidak menjelaskan bahwa Anda perlu menambahkan label aplikasi ke perintah, karena hal pertama yang diperintahkan untuk Anda lakukan adalah
python manage.py makemigrations
yang akan gagal. Migrasi awal dilakukan ketika Anda membuat aplikasi di versi 1.7, tetapi jika Anda berasal dari 1.6, itu tidak akan dilakukan. Lihat 'Menambahkan migrasi ke aplikasi' dalam dokumentasi untuk detail lebih lanjut.sumber
python manage.py makemigrations APP_LABEL
untuk masing-masing?./manage.py startapp
, tapi saya masih harus menyebutkan labelnya secara eksplisitIni dapat terjadi karena alasan berikut:
INSTALLED_APPS
daftar disettings.py
(Anda harus menambahkan nama aplikasi atau path bertitik ke subkelas AppConfig di apps.py di folder aplikasi, tergantung pada versi Django yang Anda gunakan). Rujuk dokumentasi: INSTALLED_APPSmigrations
folder di dalam aplikasi itu. (Solusi: cukup buat folder itu).__init__.py
file di dalammigrations
folder aplikasi tersebut. (Solusi: Cukup buat file kosong dengan nama __init__.py )__init__.py
file di dalam folder aplikasi. (Solusi: Cukup buat file kosong dengan nama __init__.py )models.py
file di aplikasimodels.py
tidak mewarisidjango.db.models.Model
models.py
Catatan: Kesalahan umum adalah menambahkan
migrations
folder dalam.gitignore
file. Ketika dikloning dari repo jarak jauh,migrations
folder dan / atau__init__.py
file akan hilang di repo lokal. Ini menyebabkan masalah.Saya sarankan untuk gitignore file migrasi dengan menambahkan baris berikut ke
.gitignore
filesumber
__init__.py
folder bersama dengan migrasi.You don't have __init__.py file inside migrations folder of those apps. (Solution: Just create an empty file with name __init__.py)
.. dan itu disebabkan oleh penambahan file ke.gitignore
__init__.py
file diperlukan di dalam direktori untuk membuatnya diperlakukan sebagai paket python. lihat iniOk, sepertinya saya melewatkan langkah yang jelas, tetapi memposting ini jika ada orang lain yang melakukan hal yang sama.
Ketika memutakhirkan ke 1.7, model saya menjadi tidak terkelola (
managed = False
) - Saya memilikinya sepertiTrue
sebelumnya tetapi sepertinya dikembalikan.Menghapus garis itu (Ke default ke True) dan kemudian menjalankan
makemigrations
segera membuat modul migrasi dan sekarang itu berfungsi.makemigrations
tidak akan berfungsi pada tabel yang tidak dikelola (Yang jelas di belakang)sumber
manage.py inspectdb
menambahkan kelola = Salah! jika Anda mengimpor basis data lama, Anda harus hati-hati menyetelnya!app_label
samaSolusi saya tidak dibahas di sini jadi saya mempostingnya. Saya telah menggunakan
syncdb
untuk sebuah proyek - hanya untuk menjalankan dan menjalankannya. Kemudian ketika saya mencoba untuk mulai menggunakan migrasi Django, itu memalsukan mereka pada awalnya kemudian akan mengatakan itu 'OK' tetapi tidak ada yang terjadi pada database.Solusi saya adalah menghapus semua file migrasi untuk aplikasi saya, serta catatan basis data untuk migrasi aplikasi dalam
django_migrations
tabel.Lalu saya baru saja melakukan migrasi awal dengan:
./manage.py makemigrations my_app
diikuti oleh:
./manage.py migrate my_app
Sekarang saya bisa melakukan migrasi tanpa masalah.
sumber
__init.py__
, itu tidak akan berfungsi.Setuju dengan @furins. Jika semuanya tampak berurutan namun masalah ini muncul, periksa apakah ada metode properti dengan judul yang sama dengan atribut yang Anda coba tambahkan di kelas Model.
sumber
Ini semacam kesalahan bodoh untuk dibuat, tetapi memiliki koma ekstra di akhir baris deklarasi lapangan di kelas model, membuat garis tidak berpengaruh.
Ini terjadi ketika Anda menyalin tempel def. dari migrasi, yang dengan sendirinya didefinisikan sebagai array.
Meskipun mungkin ini akan membantu seseorang :-)
sumber
Mungkin saya terlambat tetapi apakah Anda mencoba memiliki
migrations
folder di aplikasi Anda dengan__init__.py
file di dalamnya?sumber
Mungkin ini akan membantu seseorang. Saya menggunakan aplikasi bersarang. project.appname dan saya benar-benar memiliki project dan project.appname di INSTALLED_APPS. Menghapus proyek dari INSTALLED_APPS memungkinkan perubahan terdeteksi.
sumber
Jawabannya ada pada posting stackoverflow ini, oleh cdvv7788 Migrasi di Django 1.7
Saya mengalami masalah yang sama persis dan melakukan hal di atas bekerja dengan sempurna.
Saya telah memindahkan aplikasi Django saya ke cloud9 dan untuk beberapa alasan saya tidak pernah menangkap migrasi awal.
sumber
Berikut ini bekerja untuk saya:
Bekerja untuk saya: Python 3.4, Django 1.10
sumber
Orang-orang seperti saya yang tidak suka migrasi dapat menggunakan langkah-langkah di bawah ini.
python manage.py makemigrations app_label
untuk migrasi awal.python manage.py migrate
untuk membuat tabel sebelum Anda membuat perubahan.Jika Anda salah satu dari langkah-langkah ini, baca file migrasi. Ubah mereka untuk memperbaiki skema Anda atau menghapus file yang tidak diinginkan tetapi jangan lupa untuk mengubah bagian dependensi file migrasi berikutnya;)
Saya harap ini akan membantu seseorang di masa depan.
sumber
Anda ingin memeriksa
settings.py
dalamINSTALLED_APPS
daftar dan pastikan semua aplikasi dengan model tercantum di sana.Berjalan
makemigrations
di folder proyek berarti akan terlihat memperbarui semua tabel yang terkait dengan semua aplikasi yang termasuk dalamsettings.py
untuk proyek. Setelah Anda memasukkannya,makemigrations
akan secara otomatis memasukkan aplikasi (ini menghemat banyak pekerjaan sehingga Anda tidak harus menjalankanmakemigrations app_name
untuk setiap aplikasi di proyek / situs Anda).sumber
Untuk berjaga-jaga seandainya Anda memiliki bidang tertentu yang tidak dapat diidentifikasi oleh macemigrations: periksa dua kali jika Anda memiliki properti dengan nama yang sama.
contoh:
properti akan "menimpa" definisi bidang sehingga perubahan tidak akan diidentifikasi oleh
makemigrations
sumber
hourly_rate = models.DecimalField
(melewatkan trailing '()') dan hanya gagal diam-diam.Pastikan model Anda tidak
abstract
. Saya benar-benar membuat kesalahan itu dan butuh beberapa saat, jadi saya pikir saya akan mempostingnya.sumber
Menambahkan jawaban ini karena hanya metode ini yang membantu saya.
Saya menghapus
migrations
folder runmakemigrations
danmigrate
.Ia masih berkata: Tidak ada migrasi untuk diterapkan.
Saya pergi ke
migrate
folder dan membuka file yang terakhir dibuat,mengomentari migrasi yang saya inginkan (Terdeteksi dan masuk ke sana)
dan berjalan
migrate
lagi.Ini pada dasarnya mengedit file migrasi secara manual.
Lakukan ini hanya jika Anda memahami konten file.
sumber
Apakah Anda menggunakan
schemamigration my_app --initial
setelah mengganti nama folder migrasi lama? Cobalah. Mungkin bekerja Jika tidak - coba buat ulang basis data dan buat syncdb + migrasi. Itu bekerja untuk saya ...sumber
schemamigration
- saya pikir itu bagian dari Selatan? Saya tidak memiliki folder migrasi sama sekali saat ini. Menghapus sayamodels.py
dan rerunninginspectdb
sepertinya tidak melakukan apa-apa.schemamigration
berasal dari Selatan.makemigrations
adalah penggantinya.makemigrations --empty
Punya masalah yang sama Pastikan kelas apa pun yang telah Anda tetapkan di models.py, Anda harus mewarisi model. Model kelas.
sumber
Saya memiliki masalah yang sama dengan harus menjalankan macemigrations dua kali dan segala macam perilaku aneh. Ternyata akar masalahnya adalah bahwa saya menggunakan fungsi untuk menetapkan tanggal default pada model saya sehingga migrasi mendeteksi perubahan setiap kali saya menjalankan migrasi. Jawaban atas pertanyaan ini menempatkan saya di jalur yang benar: Hindari makemigrasi untuk membuat ulang bidang tanggal
sumber
Saya baru-baru ini meningkatkan Django dari 1,6 menjadi 1,8 dan memiliki beberapa aplikasi dan migrasi untuk mereka. Saya menggunakan selatan dan
schemamigrations
untuk membuat migrasi di Django 1.6, yang dijatuhkan di Django 1.8.Ketika saya menambahkan model baru setelah peningkatan,
makemigrations
perintah itu tidak mendeteksi perubahan apa pun. Dan kemudian saya mencoba solusi yang disarankan oleh @drojf (jawaban pertama), itu berfungsi dengan baik, tetapi gagal untuk menerapkan migrasi awal palsu (python manage.py --fake-initial
). Saya melakukan ini karena meja saya (tabel lama) sudah dibuat.Akhirnya ini berhasil bagi saya, menghapus model-model baru (atau perubahan model) dari models.py dan kemudian harus menghapus (atau mengganti nama untuk cadangan keselamatan) folder migrasi semua aplikasi dan menjalankan
manage.py
macemigrations python untuk semua aplikasi, kemudian lakukanpython manage.py migrate --fake-initial
. Ini bekerja seperti pesona. Setelah migrasi awal dibuat untuk semua aplikasi dan memalsukan awal migrasi, kemudian menambahkan model baru dan mengikuti proses regulermakemigrations
dan bermigrasi pada aplikasi itu. Perubahan terdeteksi sekarang dan semuanya berjalan dengan baik.Saya hanya berpikir untuk membagikannya di sini, jika seseorang menghadapi masalah yang sama (memiliki
schemamigrations
selatan untuk aplikasi mereka), itu mungkin membantu mereka :)sumber
Mungkin itu bisa membantu seseorang, saya punya masalah yang sama.
Saya sudah membuat dua tabel dengan kelas serializer dan pandangan. Jadi ketika saya ingin memperbarui, saya memiliki kesalahan ini.
Saya mengikuti langkah-langkah ini:
.\manage.py makemigrations app
.\manage.py migrate
models.py
1
dan2
.models.py
5
.Jika Anda bekerja dengan Pycharm, sejarah lokal sangat membantu.
sumber
Mungkin ini akan membantu seseorang.
Saya telah menghapus
models.py
dan berharapmakemigrations
untuk membuatDeleteModel
pernyataan.Ingatlah untuk menghapus
*.pyc
file!sumber
Migrasi melacak perubahan ke DB sehingga jika Anda berubah dari tidak terkelola menjadi terkelola, Anda harus memastikan bahwa tabel basis data Anda mutakhir terkait dengan Model yang Anda hadapi.
Jika Anda masih dalam mode dev, saya pribadi memutuskan untuk menghapus file migrasi di IDE saya dan juga di tabel django_migrations yang berkaitan dengan Model saya dan jalankan kembali perintah di atas.
INGAT: jika Anda memiliki migrasi yang diakhiri dengan _001 di IDE Anda & _003 di database Anda. Django hanya akan melihat apakah Anda memiliki migrasi yang diakhiri dengan _004 agar ada yang diperbarui.
2 (migrasi kode & db) ditautkan dan berfungsi bersama-sama.
Selamat coding.
sumber
sumber
Menambahkan jawaban ini karena tidak ada yang lain di atas yang berfungsi untuk saya.
Dalam kasus saya sesuatu yang lebih aneh sedang terjadi ( Versi Django 1.7 ), Dalam models.py saya, saya memiliki garis "ekstra" di akhir file saya (itu adalah baris kosong) dan ketika saya menjalankan
python manage.py makemigrations
perintah hasilnya adalah: "tidak ada perubahan yang terdeteksi".Untuk memperbaikinya saya menghapus "baris kosong" ini yang ada di akhir file models.py saya dan saya menjalankan perintah lagi, semuanya sudah diperbaiki dan semua perubahan yang dibuat untuk models.py terdeteksi!
sumber
Anda mungkin perlu memalsukan migrasi awal menggunakan perintah di bawah ini
sumber
Pertama, solusi ini berlaku untuk mereka yang menghadapi masalah yang sama selama penempatan di server heroku, saya menghadapi masalah yang sama.
Untuk menggunakan, ada langkah wajib yaitu menambahkan django_heroku.settings (lokal ()) dalam file settings.py.
Perubahan: Ketika saya mengubah baris di atas menjadi django_heroku.settings (penduduk lokal (), database = Salah), ia bekerja dengan sempurna.
sumber
Dalam kasus saya, saya perlu menambahkan model saya ke file _ init _.py dari folder models di mana model saya didefinisikan:
sumber
Menambahkan 2c saya, karena tidak ada solusi yang bekerja untuk saya, tetapi ini ...
Saya baru saja lari
manage.py squashmigrations
dan menghapus migrasi lama (baik file dan baris di tabel database django.migrations).Ini meninggalkan baris seperti ini di file migrasi terakhir:
Ini tampaknya membingungkan Django dan menyebabkan perilaku aneh: berlari
manage.py makemigrations my_app
akan menciptakan migrasi awal seolah-olah tidak ada. Menghapusreplaces...
garis memperbaiki masalah!sumber
python manage.py akun makemigrasi Migrasi untuk 'akun': akun \ migrasi \ 0001_initial.py - Buat model Pelanggan - Buat model Tag - Buat model Produk - Buat model Produk - Buat model Pesanan
Catatan: di sini "akun" adalah nama aplikasi saya
sumber