2012-07-11 45 views
0

我的老工人問題通過PIP安裝Pinax和它安裝在站點包。所有的應用程序都在那裏。我們自己的應用程序在我們的Django項目結構中。有關擴展任何Django應用程序

我想通過將create_useris_active標誌切換爲False來修改Pinax的帳戶應用程序。目前,該應用使其成爲True。我也想添加額外的功能create_user或任何我想要做的功能。

from pinax.account import forms 
class MyCustomizeForm(forms.SignupForm): 
    def create_user(....): 
     super(....) 
     // additional... 

也許這樣? 但是,這不需要我至少執行兩次與數據庫交互的提交事務嗎?

是不是最好?另外,這樣做是否需要我在我的Django項目中更改其他任何內容(用戶註冊的方式,它使用的視圖...使用什麼形式)?

目前,我有一個應用程序住在我的Django項目設對付account應用程序的擴展/定製。我無法將站點包提交到VCS ....我的意思是......我不應該在那裏做任何更改。

謝謝。


Pinax帳戶/ models.py

class Account(models.Model): 
    ... 
    def its_own_method(...) 
# this is in the same indentation level as class Account 

def create_account(sender, instance=None, **kwargs): 
    if instance is None: 
     return 
    account, created = Account.objects.get_or_create(user=instance) 

post_save.connect(create_account, sender=User) 

回答

1

可以使用django signals正是這種情況。信號意味着需要普遍分發的應用程序,並不總是知道它們將如何集成到項目中。

你的興趣在這裏的信號是pre_save。您可以將pre_save連接到pinax.account模型,並在保存即將發生時收到通知。這將使您有機會對該模型實例進行更改。信號是同步的,這意味着你正在你的變化連續,右側前pinax.accounts將完成提交保存

+0

感謝。你是說自定義動作會在'save()'實際被調用之前執行,還是在它完成之前執行直到最後一行? – User007 2012-07-11 18:25:33

+0

pre_save信號將爲您提供即將保存的模型實例。您有機會在該信號處理程序的上下文中對其進行修改。您不需要在該處理程序中調用保存。它即將被保存,並且一旦它完成了所有pre_save信號。 – jdi 2012-07-11 18:58:31

+0

謝謝。但是執行'pre_save.connect(make_inactive,sender = User)'意味着只要'User'模型正在保存,它就會觸發'make_inactive'函數。我用Pinax賬戶的信號更新了我的帖子。我該怎麼做呢? – User007 2012-07-11 19:28:54

相關問題