Saya mencoba membuat migrasi dalam aplikasi yang ada menggunakan perintah makemigrations tetapi menghasilkan "Tidak ada perubahan yang terdeteksi".
Biasanya saya membuat aplikasi baru menggunakan startapp
perintah tetapi tidak menggunakannya untuk aplikasi ini ketika saya membuatnya.
Setelah debugging, saya menemukan bahwa itu tidak membuat migrasi karena migrations
paket / folder hilang dari suatu aplikasi.
Apakah akan lebih baik jika membuat folder jika tidak ada atau saya kehilangan sesuatu?
python
django
django-migrations
Dilraj
sumber
sumber
makemigrations <myapp>
seperti yang ditunjukkan Alasdair.Jawaban:
Untuk membuat migrasi awal untuk suatu aplikasi, jalankan
makemigrations
dan tentukan nama aplikasi. Folder migrasi akan dibuat.Aplikasi Anda harus dimasukkan
INSTALLED_APPS
terlebih dahulu (di dalam settings.py).sumber
migrations
folder. Ini bisa terjadi jika Anda membuat aplikasi secara manual, atau Anda telah memutakhirkan dari versi Django yang lebih lama yang tidak memiliki migrasi.__init__.py
) bernama 'migrasi' di aplikasi.migrate
.Masalah saya (dan solusi) belum berbeda dari yang dijelaskan di atas.
Saya tidak menggunakan
models.py
file, tetapi membuatmodels
direktori dan membuatmy_model.py
file di sana, di mana saya meletakkan model saya. Django tidak dapat menemukan model saya sehingga tertulis bahwa tidak ada migrasi untuk diterapkan.Solusi saya adalah: dalam
my_app/models/__init__.py
file saya menambahkan baris ini:from .my_model import MyModel
sumber
Ada beberapa kemungkinan alasan untuk Django tidak mendeteksi apa yang harus dimigrasi selama
makemigrations
perintah.INSTALLED_APPS
.dictmakemigrations -v 3
untuk verbositas. Ini mungkin menjelaskan masalah ini.INSTALLED_APPS
dalamnya disarankan untuk menentukan path konfigurasi aplikasi modul lengkap 'apply.apps.MyAppConfig'manage.py makemigrations --settings mysite.settings
manage.py makemigrations myapp
- yang mempersempit migrasi untuk aplikasi itu sendiri dan membantu Anda mengisolasi masalahnya.meta model periksa Anda memiliki hak
app_label
di meta model AndaDebug django debug skrip inti django. perintah makemigrations cukup mudah. Inilah cara melakukannya di pycharm . mengubah definisi naskah Anda sesuai (ex:
makemigrations --traceback myapp
)Banyak basis data:
allow_syncdb
metode ini.sumber
from recurrence.forms import RecurrenceField
tapi seharusnya begitufrom recurrence.fields import RecurrenceField
.makemigrations
Script mencari model yang terhubung dariurls.py
". Ditemukan di sini stackoverflow.com/questions/43093651/…python manage.py makemigrations -v 3 <app_name>
Saya telah membaca banyak jawaban untuk pertanyaan ini yang sering menyatakan hanya menjalankan
makemigrations
beberapa cara lain. Tetapi bagi saya, masalahnya ada diMeta
subkelas model.Saya memiliki konfigurasi aplikasi yang mengatakan
label = <app name>
(dalamapps.py
file, di sebelahmodels.py
,views.py
dll). Jika kebetulan, meta class Anda tidak memiliki label yang sama dengan label aplikasi (misalnya karena Anda membagi satu aplikasi terlalu besar menjadi beberapa aplikasi), tidak ada perubahan yang terdeteksi (dan tidak ada pesan kesalahan yang membantu sama sekali). Jadi di kelas model saya sekarang:Menjalankan Django 1.10 di sini.
sumber
Itu adalah komentar tetapi mungkin harus menjadi jawaban.
Pastikan nama aplikasi Anda ada di settings.py
INSTALLED_APPS
jika tidak, apa pun yang Anda lakukan tidak akan menjalankan migrasi.Lalu lari:
sumber
Saya punya masalah lain yang tidak dijelaskan di sini, yang membuat saya gila.
Saya mengikuti ',' dalam satu baris mungkin dari salin & tempel. Baris dengan is_dumb tidak membuat migrasi model dengan './manage.py makemigrations' tetapi juga tidak menghasilkan kesalahan. Setelah menghapus ',' itu berfungsi seperti yang diharapkan.
Jadi berhati-hatilah saat Anda menyalin & menempel :-)
sumber
is_dumb
sama dengan(models.BooleanField(default=False), )
yangmakemigrations
tidak tahu bagaimana mengkonversi ke kolom basis data.Terkadang
./manage.py makemigrations
lebih unggul./manage.py makemigrations <myapp>
karena dapat menangani konflik tertentu antar aplikasi.Kejadian-kejadian itu terjadi secara diam-diam dan butuh beberapa jam
swearing
untuk memahami arti sebenarnya dariNo changes detected
pesan yang ditakuti itu .Oleh karena itu, ini adalah pilihan yang jauh lebih baik untuk menggunakan perintah berikut:
./manage.py makemigrations <myapp1> <myapp2> ... <myappN>
sumber
Saya telah menyalin tabel dari luar Django dan kelas Meta default ke "managed = false". Sebagai contoh:
Dengan mengubah manged menjadi True, migrasi mulai mengambil perubahan.
sumber
sumber
Saya memecahkan masalah itu dengan melakukan ini:
sumber
Saya lupa mengajukan argumen yang benar:
di models.py dan kemudian mulai drop yang menjengkelkan
Tidak ada perubahan yang terdeteksi di aplikasi 'myApp'
sumber
Alasan lain yang mungkin adalah jika Anda memiliki beberapa model yang ditentukan dalam file lain (bukan dalam sebuah paket) dan belum mereferensikannya di tempat lain.
Bagi saya, hanya menambahkan
from .graph_model import *
keadmin.py
(managraph_model.py
adalah file baru) tetap masalah.sumber
Masalah saya jauh lebih sederhana daripada jawaban di atas dan mungkin alasan yang jauh lebih umum selama proyek Anda sudah disiapkan dan berfungsi. Dalam salah satu aplikasi saya yang telah bekerja sejak lama, migrasi tampaknya tidak berhasil, jadi terburu-buru, saya melakukan hal berikut:
Apa??
Saya keliru juga menghapus semua
__init__.py
file :( - Semuanya berfungsi kembali setelah saya masuk dan:Untuk setiap aplikasi saya kemudian
makemigrations
bekerja kembali.Ternyata saya telah secara manual membuat aplikasi baru dengan menyalin yang lain dan lupa untuk meletakkannya
__init__.py
dimigrations
folder dan hal itu membatasi saya bahwa semuanya tidak akan berhasil - membuat saya semakin buruk denganrm -r
seperti yang dijelaskan di atas.Semoga ini membantu seseorang dari bersumpah pada kesalahan "Tidak ada perubahan terdeteksi" selama beberapa jam.
sumber
Solusinya adalah Anda harus memasukkan aplikasi Anda di INSTALLED_APPS.
Saya melewatkannya dan saya menemukan masalah yang sama.
setelah menentukan migrasi nama aplikasi saya menjadi berhasil
harap dicatat saya sebutkan papan di terakhir, yang merupakan nama aplikasi saya.
sumber
INSTALLED_APPS = [
]
pastikan 'blog.apps.BlogConfig', (ini termasuk dalam settings.py Anda untuk membuat migrasi aplikasi Anda)
kemudian jalankan python3 manage.py makemigrations blog atau nama aplikasi Anda
sumber
Masalah yang sangat bodoh yang dapat Anda miliki juga adalah mendefinisikan dua
class Meta
dalam model Anda. Dalam hal itu, perubahan apa pun pada yang pertama tidak akan diterapkan saat berjalanmakemigrations
.sumber
Saya tahu ini adalah pertanyaan lama tapi saya berjuang dengan masalah yang sama sepanjang hari dan solusi saya sederhana.
Saya memiliki struktur direktori saya sesuatu di sepanjang ...
Dan karena semua model lainnya sampai yang saya punya masalah dengan sedang diimpor di tempat lain yang akhirnya mengimpor dari
main_app
yang terdaftar diINSTALLED_APPS
, saya hanya beruntung bahwa mereka semua bekerja.Tetapi karena saya hanya menambahkan masing
app
- masing keINSTALLED_APPS
dan bukanapp_sub*
ketika saya akhirnya menambahkan file model baru yang tidak diimpor ke tempat lain, Django benar-benar mengabaikannya.Perbaikan saya menambahkan
models.py
file ke direktori basis masingapp
- masing seperti ini ...dan kemudian tambahkan
from apps.app.app_sub1 import *
dan seterusnya ke masing-masing fileapp
levelmodels.py
.Bleh ... ini butuh waktu lama bagi saya untuk mencari tahu dan saya tidak dapat menemukan solusinya di mana pun ... Saya bahkan pergi ke halaman 2 dari hasil google.
Semoga ini bisa membantu seseorang!
sumber
Saya punya masalah serupa dengan Django 3.0, menurut bagian migrasi di dokumentasi resmi , menjalankan ini sudah cukup untuk memperbarui struktur tabel saya:
Tetapi hasilnya selalu sama: 'tidak ada perubahan yang terdeteksi' tentang model saya setelah saya menjalankan skrip 'makemigrations'. Saya mengalami kesalahan sintaks pada models.py pada model yang ingin saya perbarui di db:
dari pada:
Menyelesaikan kesalahan bodoh ini, dengan perintah itu migrasi dilakukan tanpa masalah. Mungkin ini membantu seseorang.
sumber
Anda harus menambahkan
polls.apps.PollsConfig
keINSTALLED_APPS
dalamsetting.py
sumber
Dalam kasus saya, saya lupa memasukkan argumen kelas
Salah:
Benar
sumber
Dalam kasus saya, saya pertama kali menambahkan bidang ke model, dan Django mengatakan tidak ada perubahan.
Daripada saya memutuskan untuk mengubah "nama tabel" dari model, macemigrations bekerja. Daripada saya mengubah nama tabel kembali ke default, dan bidang baru juga ada di sana.
Ada "bug" dalam sistem migrasi Django, kadang-kadang tidak melihat bidang baru. Mungkin terkait dengan bidang tanggal.
sumber
Alasan yang mungkin bisa jadi adalah penghapusan file db yang ada dan folder migrasi yang dapat Anda gunakan python
manage.py makemigrations <app_name>
. Saya pernah menghadapi masalah yang sama.sumber
Satu lagi kasus tepi dan solusi:
Saya menambahkan bidang boolean, dan pada saat yang sama menambahkan @ properti yang merujuknya, dengan nama yang sama (doh). Mengomentari properti dan migrasi melihat dan menambahkan bidang baru. Berganti nama menjadi properti dan semuanya baik-baik saja.
sumber
Jika Anda memiliki
managed = True
Meta model Anda, Anda harus menghapusnya dan melakukan migrasi. Kemudian jalankan migrasi lagi, itu akan mendeteksi pembaruan baru.sumber
Saat menambahkan model baru ke aplikasi api Django dan menjalankan
python manage.py makemigrations
alat tidak mendeteksi model baru.Yang aneh adalah bahwa model lama memang dipilih
makemigrations
, tetapi ini karena mereka dirujuk dalamurlpatterns
rantai dan alat entah bagaimana mendeteksi mereka. Jadi awasi perilaku itu.Masalahnya adalah karena struktur direktori yang sesuai dengan paket model memiliki subpackages dan semua
__init__.py
file kosong. Mereka harus secara eksplisit mengimpor semua kelas yang diperlukan di setiap subfolder dan dalam model__init__.py
untuk Django untuk mengambilnya denganmakemigrations
alat.sumber
Coba daftarkan model Anda di admin.py, berikut ini contohnya: - admin.site.register (YourModelHere)
Anda dapat melakukan hal-hal berikut: - 1. admin.site.register (YourModelHere) # Di admin.py 2. Muat ulang halaman dan coba lagi 3. Tekan CTRL-S dan simpan 4. Mungkin ada kesalahan, khususnya periksa model .py dan admin.py 5. Atau, pada akhirnya semuanya cukup restart server
sumber
Semoga ini bisa membantu orang lain, karena saya menghabiskan berjam-jam mencoba untuk mengejar ini.
Jika Anda memiliki fungsi dalam model Anda dengan nama yang sama, ini akan menghapus nilai. Cukup jelas di belakang, tapi tetap saja.
Jadi, jika Anda memiliki sesuatu seperti ini:
Dalam hal ini, fungsi akan menimpa pengaturan di atas, membuatnya "tidak terlihat"
makemigrations
.sumber
Hal terbaik yang dapat Anda lakukan adalah, Hapus database yang ada. Dalam kasus saya, saya menggunakan database SQL phpMyAdmin, jadi saya menghapus secara manual database yang dibuat di sana.
Setelah Menghapus: Saya membuat database di PhpMyAdmin, dan tidak menambahkan tabel apa pun.
Sekali lagi jalankan Perintah berikut:
python manage.py makemigrations
python manage.py migrate
Setelah Perintah-Perintah Ini : Anda dapat melihat Django secara otomatis membuat tabel-tabel lain yang diperlukan dalam Database (Kira-kira 10 tabel).
python manage.py makemigrations <app_name>
python manage.py migrate
Dan Terakhir: Setelah perintah di atas, semua model (tabel) yang Anda buat langsung diimpor ke database.
Semoga ini bisa membantu.
sumber
Masalah saya dengan kesalahan ini, adalah bahwa saya telah memasukkan:
Di dalam model yang ingin saya buat migrasi untuk.
sumber
Saya memiliki masalah berbeda saat membuat aplikasi baru bernama
deals
. Saya ingin memisahkan model di dalam aplikasi itu jadi saya punya 2 file model bernamadeals.py
dandealers.py
. Saat berlaripython manage.py makemigrations
saya mendapat:No changes detected
.Saya pergi ke depan dan di dalam
__init__.py
yang tinggal di direktori yang sama di mana file model saya tinggal (penawaran dan dealer) saya lakukanDan kemudian
makemigrations
perintah itu bekerja.Ternyata jika Anda tidak mengimpor model di mana pun ATAU nama file model Anda tidak
models.py
maka model tidak akan terdeteksi.Masalah lain yang terjadi pada saya adalah cara saya menulis aplikasi di
settings.py
:Saya punya:
Seharusnya sudah termasuk folder proyek root:
sumber