SORU
11 AĞUSTOS 2009, Salı


Nasıl yeni bir django uygulaması dışında bir modele geçiş yapabilirim?

Bu dört yeni modeli ile django uygulaması var. Bu modellerden biri ayrı bir uygulama olması gerektiğini şimdi anlıyorum. Güney geçişleri için yüklü var, ama bu otomatik olarak işleyebilir bir şey olduğunu sanmıyorum. Nasıl modellerinden biri eski app yeni bir tane taşıyabilir miyim?

Ayrıca, bu üretim sistemine geçiş böylece tekrarlanabilir bir süreç, ve bu tür ihtiyacım olacak unutmayın.

CEVAP
20 Kasım 2009, Cuma


Nasıl kullanarak Güney geçirilecek.

İki uygulama var diyelim: genel ve özel:

myproject/
|-- common
|   |-- migrations
|   |   |-- 0001_initial.py
|   |   `-- 0002_create_cat.py
|   `-- models.py
`-- specific
    |-- migrations
    |   |-- 0001_initial.py
    |   `-- 0002_create_dog.py
    `-- models.py

Şimdi model ortak hareket etmek istiyoruz.modelleri.belirli bir uygulama için kedi (tam olarak belli.modelleri.kedi). İlk kaynak kodu değişiklikleri yapın ve çalıştırın:

$ python manage.py schemamigration specific create_cat --auto
   Added model 'specific.cat'
$ python manage.py schemamigration common drop_cat --auto
 - Deleted model 'common.cat'

myproject/
|-- common
|   |-- migrations
|   |   |-- 0001_initial.py
|   |   |-- 0002_create_cat.py
|   |   `-- 0003_drop_cat.py
|   `-- models.py
`-- specific
    |-- migrations
    |   |-- 0001_initial.py
    |   |-- 0002_create_dog.py
    |   `-- 0003_create_cat.py
    `-- models.py

Şimdi de göç dosyalarını düzenlemek için ihtiyacımız var:

#0003_create_cat: replace existing forward and backward code
#to use just one sentence:

def forwards(self, orm):
    db.rename_table('common_cat', 'specific_cat') 

    if not db.dry_run:
        # For permissions to work properly after migrating
        orm['contenttypes.contenttype'].objects.filter(
            app_label='common',
            model='cat',
        ).update(app_label='specific')

def backwards(self, orm):
    db.rename_table('specific_cat', 'common_cat')

    if not db.dry_run:
        # For permissions to work properly after migrating
        orm['contenttypes.contenttype'].objects.filter(
            app_label='specific',
            model='cat',
        ).update(app_label='common')

#0003_drop_cat:replace existing forward and backward code
#to use just one sentence; add dependency:

depends_on = (
    ('specific', '0003_create_cat'),
)
def forwards(self, orm):
    pass
def backwards(self, orm):
    pass

Şimdi göçler değişimin farkında olan ve hayat biraz daha az berbat her iki uygulamalar :-) Göçler arasındaki bu ilişki ayar başarının anahtarı. Eğer bunu yaparsanız artık:

python manage.py migrate common
 > specific: 0003_create_cat
 > common: 0003_drop_cat

hem de geçiş yapacak

python manage.py migrate specific 0002_create_dog
 < common: 0003_drop_cat
 < specific: 0003_create_cat

şeyler geçirme.

Şema yükseltme için ortak uygulamayı kullandım dikkat edin ve karşıdan için, belirli bir uygulama kullandım. Bu bağımlılık burada çalışıyor çünkü.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Carlos Delgado

    Carlos Delga

    21 HAZİRAN 2011
  • expertvillage

    expertvillag

    5 NİSAN 2006
  • kimaliz

    kimaliz

    18 Temmuz 2006