Kolay bir model Django kullanarak yeniden adlandır/Güney yolu?
Güney sitesi, Google'da bu bir cevap, ve bu YÜZDEN onu aradım, ama bunu yapmak için basit bir yol bulamadı.
Django model Güney kullanarak yeniden adlandırmak istiyorum. Aşağıdaki:
class Foo(models.Model):
name = models.CharField()
class FooTwo(models.Model):
name = models.CharField()
foo = models.ForeignKey(Foo)
Bar Foo dönüştürmek için, yani seni istiyorum
class Bar(models.Model):
name = models.CharField()
class FooTwo(models.Model):
name = models.CharField()
foo = models.ForeignKey(Bar)
Basit tutmak için, sadece Bar
Foo
adını değiştirmek ama şimdilik FooTwo
9 *üye aldırmamaya çalışıyorum.
Bu kullanarak Güney yapmak için en kolay yolu nedir?
- Muhtemelen veri geçiş yapabilirim, ama çok karmaşık görünüyor.
- Özel bir geçiş yazmak, örneğin
db.rename_table('city_citystate', 'geo_citystate')
ama bu durumda yabancı anahtar düzeltmek için nasıl emin değilim. - Bildiğiniz daha kolay bir yol?
CEVAP
İlk sorunun cevabı, basit model/tablo yeniden adlandırmak oldukça basittir. Komutu çalıştırın:
./manage.py schemamigration yourapp rename_foo_to_bar --empty
(Güncelleme 2: --empty
yerine --auto
uyarı aşağıda kaçınıyorum. @Tavsiyen için teşekkürler KFB.)
Eğer Güney eski bir sürümünü kullanıyorsanız, schemamigration
yerine startmigration
gerekir.
Daha sonra el ile geçiş dosyası bu gibi görünüyor için düzenleyin
class Migration(SchemaMigration):
def forwards(self, orm):
db.rename_table('yourapp_foo', 'yourapp_bar')
def backwards(self, orm):
db.rename_table('yourapp_bar','yourapp_foo')
Bu daha basit bir model sınıf db_table
Meta seçeneğini kullanarak gerçekleştirebilirsiniz. Ama her zaman, kilo kodunuzu anlamak ve korumak için daha zor hale getirir mirası artırmak bunu. Ben tam netlik için böyle basit refactorings destek yapıyor.
(update) sadece üretimde bu denenmiş ve geçiş uygulamak için gittiğimde garip bir uyarı var. O dedi ki:
The following content types are stale and need to be deleted: yourapp | foo Any objects related to these content types by a foreign key will also be deleted. Are you sure you want to delete these content types? If you're unsure, answer 'no'.
"Hayır" ve her şey yolunda görünüyordu. cevap verdim
Model alan Güney kullanarak yeniden ad...
Nasıl Django model bir modül&; manage....
Bir Uİİmage yeniden boyutlandırmak içi...
'göç geçmişi kullanarak sıfırlama...
' / yeniden yüklemek için en iyi ...