0

我的老员工通过 PIP 安装了 Pinax,它安装在站点包中。所有的应用程序都在那里。我们自己的应用程序在我们的 Django 项目结构中。

create_user我想通过将'is_active标志切换为 False 来修改 Pinax 的帐户应用程序。目前,该应用程序使其True. 我还想添加其他功能create_user或我想做的任何功能。

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

也许这个?但这不需要我至少做两个与 DB 对话的提交事务吗?

那更可取吗?此外,这样做是否需要我更改 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)
4

1 回答 1

1

对于这种情况,您可以使用django 信号。信号适用于需要普遍分发并且并不总是知道如何将它们集成到项目中的应用程序。

您感兴趣的信号是pre_save。您可以将 pre_save 连接到 pinax.account 模型,并在即将发生保存时收到通知。这将使您有机会对该模型实例进行更改。信号是同步的,这意味着您正在连续进行更改,就在 pinax.accounts 完成提交保存之前

于 2012-07-11T18:00:37.313 回答