0

django-registrationアプリを使用しています。私は2つの登録フォームAB. Aデフォルトの登録フィールドがあります。カスタム フィールドとBシグナルを追加しました。次のシグナルは、両方の登録フォームに対しても実行されます。それが私が追加した理由ですif form.is_valid()。そしてそれは吸う。BFormが呼び出されたときだけ実行したい。代替手段はありますか?誰かがこのコードを改善するのを手伝ってくれますか? ありがとう

class BForm(RegistrationForm):
    """
    Subclass of ``RegistrationForm``
    """
    phone = forms.CharField(max_length=100, required=False)

信号

def user_created(sender, user, request, **kwargs):
    form = BForm(request.POST)
    if form.is_valid():
        .....
user_registered.connect(user_created)
4

2 に答える 2

0

トピックに関する Django のドキュメントに従って、次のように簡単に実行できます。

user_registered.connect(user_created, sender=BForm)

そしてそれはうまくいくはずです。

于 2012-11-03T16:17:07.780 に答える
0

両方のフォームを送信すると、シグナルが実行されます。これは、ユーザーが登録された後のregisterビューからシグナルが送信されるために発生します。django-registrationそのため、どのようなフォームを使用しても、ユーザーが正常に登録されると、シグナルuser_registeredが実行されます。

form.is_valid() に関する問題について:

BFormのrequired=Falseonphoneフィールドがあるためphone、POST データに存在しなくてBFormも有効であり、レシーバー関数のコードuser_createdが実行されます。

次の変更を加えてuser_created、BForm が使用されている場合にのみレシーバー関数を実行するようにすることができます。

def user_created(sender, user, request, **kwargs):
    if 'phone' in request.POST:
        .....
        .....
user_registered.connect(user_created)
于 2013-03-28T09:31:44.190 に答える