2016-08-24 63 views
0

我需要在每次啓動應用程序時運行一些代碼。我需要能夠操縱模型,就像我在實際視圖代碼中一樣。具體來說,我試圖破解內置的用戶模型,以支持更長的用戶名,所以我的代碼是這樣的在Django應用程序上運行代碼開始

 
def username_length_hack(sender, *args, **kwargs): 
    model = sender._meta.model 
    model._meta.get_field("username").max_length = 254 

但我似乎無法找到合適的地方做。我嘗試在使用User模型的應用程序的models.py或app.py中添加一個class_prepared信號處理程序(期望該應用程序模型被加載時該用戶將加載)。 post_migrate和pre_migrate僅在migrate命令上運行。在settings.py中添加代碼似乎很奇怪,而且無論如何都沒有加載任何內容。到目前爲止,唯一有效的工作是將其連接到pre_init信號,並在每次生成User實例時運行它。但是這似乎是一種資源消耗。我正在使用Django 1.8。我如何在每次應用加載時運行此操作?

+1

[這](http://stackoverflow.com/questions/6791911/execute-code-when-django-starts-once-only)可能會幫助您。 – Harrison

+3

*我試圖破解內置的用戶模型* <=這是我停止的地方,因爲[您可以更容易地提供自定義用戶模型](https://docs.djangoproject.com/en/1.8/topics/ AUTH /定製/#指定-A-定製用戶模型)。甚至還記錄瞭如何更改用戶名字段。猴子修補模型不是一個好主意。 – dhke

+0

@dhke我無法將多兆字節的代碼庫轉換爲自定義用戶模型。 –

回答

1

我同意評論;有比這更漂亮的方法。

你可以你的代碼添加到您的應用程序的__init__.py

+0

模型不會在解析'__init __。py'時加載 –

相關問題