0

私の古い従業員は PIP を介して Pinax をインストールし、サイト パッケージにインストールされています。すべてのアプリがそこにあります。私たち自身のアプリは、Django プロジェクト構造内にあります。

create_useris_activeフラグを Falseに切り替えて、Pinax のアカウント アプリを変更したいと考えています。現在、アプリはそれを作りますTrue。また、機能を追加したり、やりたい機能を追加しcreate_userたりしたいと考えています。

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

もしかしてこれ?しかし、DB と通信するコミット トランザクションを少なくとも 2 回実行する必要はありませんか?

それは好ましいですか?また、これを行うには、私の 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 に答える