2016-06-23 15 views
7

proxy model'u yeni oluşturdum ve manage.py makemigrations'un migrations.CreateModel işlemiyle yeni bir geçiş dosyası oluşturduğuna şaşırdım.Django neden proxy modelleri için geçiş dosyaları oluşturur?

Bir proxy modeli, yeni bir veritabanı tablosu oluşturmaz, aynı veri kümesine yalnızca farklı bir python arabirimi ve gerçekten de manage.py sqlmigrate my_app_label 0042 hiçbir şey döndürmez.

Proxy modeli ContentType'ın oluşturulmasında kullanılabileceğini düşündüm ancak bunlar var olmadıklarında isteğe bağlı olarak oluşturulur.

Proxy model izinlerinin oluşturulmasını tetiklemek için kullanılır mı? Proxy model izinleri üzerinde bir 6 year old open bug var, bu yüzden bu parçanın şimdi nasıl çalışacağına emin değilim ...

Bunu test etmek için Django 1.8 kullanıldı.

Düzenleme: netleştirmek için, Django yüzden bunun hiçbir faydası olmadığını Django ilk etapta göçü oluşturmaz istemem yeni vekil modelleri için hiçbir şey yapmaz Taşımayı yaratır?

Taşıma işleminin yararlı olacağı bir kullanım durumu var mı?

cevap

9

Ah ama eğer editörünüzde geçişi açarsanız, aslında boş bir göç olduğunu göreceksiniz! İşte bir örnek

class Migration(migrations.Migration): 
    dependencies = [ 
     ('stackoverflow', '0009_auto_20160622_1507'), 
    ] 

    operations = [ 
     migrations.CreateModel(
      name='MyArticle', 
      fields=[ 
      ], 
      options={ 
       'proxy': True, 
      }, 
      bases=('stackoverflow.article',), 
     ), 
    ] 

olduğunu Ve ne olsun budur (hiçbir şey)

sonraki satırda ne olduğunu (yukarıda benim göç karşılık gelen sayı olan) ./manage.py sqlmigrate myapp 0010 yaparsanız fields bölümünde çünkü geçişin ve proxy = True olduğunu. Bu, bu geçiş için herhangi bir SQL'in yürütülmesini engeller ve orijinal tablo el değmeden bırakılır.

Django'nun neden boş bir göç oluşturma zahmetine girdiğini sorabilirsiniz. Bunun sebebi, proxy modelinin gelecekteki bir göç için başka bir model tarafından yönlendirilmesidir.

İlgili konular