2015-07-13 27 views
0

我正在使用django 1.8.1,並試圖從我的一個應用程序擴展auth_user名稱字段的長度。之前,與韓國,我可以只針對應用程序,象這樣一個下劃線:django手寫遷移改變驗證

db.alter_column('auth_group', 'name', models.CharField(max_length=120, null=False, blank=False)) 

然而,在Django 1.8,我沒有看到一個辦法做到這一點是Django的在SQL withing的推杆應用程序名稱源代碼。我不想編輯django源代碼,所以我無法改變它。我目前的嘗試在這裏:

class Migration(migrations.Migration): 

dependencies = [ 
    ('auth', '0006_require_contenttypes_0002'), 
]  

operations = [ 
    migrations.AlterField('auth_group', 'name', field=models.CharField(max_length=120, null=False, blank=False)), 
] 

請幫忙。我不想編輯django源代碼,我只想做migrations.RunSQL作爲最後的手段。

回答

0

嘛,有做一個取巧的辦法:

# -*- coding: utf-8 -*- 
from django.db.migrations import Migration as DjangoMigration, AlterField 
from django.db.models import CharField 


class Migration(DjangoMigration): 
    dependencies = [ 
     # Specify other dependencies, if required. 
     ('auth', '0006_require_contenttypes_0002') 
    ] 
    operations = [ 
     AlterField(
      model_name='User', 
      name='username', 
      field=CharField(max_length=120) 
     ) 
    ] 

    def mutate_state(self, project_state, preserve=True): 
     """ 
     This is a workaround that allows to store ``auth`` 
     migration outside the directory it should be stored. 
     """ 
     app_label = self.app_label 
     self.app_label = 'auth' 
     state = super(Migration, self).mutate_state(project_state, preserve) 
     self.app_label = app_label 
     return state 

    def apply(self, project_state, schema_editor, collect_sql=False): 
     """ 
     Same workaround as described in ``mutate_state`` method. 
     """ 
     app_label = self.app_label 
     self.app_label = 'auth' 
     state = super(Migration, self).apply(project_state, schema_editor, collect_sql) 
     self.app_label = app_label 
     return state 

有一個合適的名字,例如把這個應用程序的文件夾migrations0001_alter_auth_user_username.py

但我不確定這是否是一種好方法。

+0

因此,本質上,我正在改變整個遷移類的應用程序名稱? –

+0

@IanKirkpatrick您正在某些地方更改它,以便遷移可以從正確的應用程序獲取模型,即''用戶'模型將從'auth'應用程序獲得,同時遷移本身將屬於您的項目。 –

0

謝謝@Ernest十。

就我而言,我一直在依賴:

dependencies = [ # Specify other dependencies, if required. ('auth', '0004_alter_user_username_opts') ]

確保您運行「蟒蛇manage.py遷移」得到這個反映到你分貝。