0

現在、ユーザーが自分のプロファイル(django-profiles)を編集できるフォームがあります。ユーザーがカナダと米国のどちらを選択したかによって、州と県のスイッチを配置したことを除いて、フォームはうまく機能しています。

私のモデルでは、州と県の両方が設定されているため、テーブルには2つの別々のフィールドがあります。

私のsaveメソッドには、次のものがあります。

def user_created(sender, user, request, **kwargs):
    form = RegistrationFormZ(request.POST)
   ....stuff here.....
    if form.data["country"] == 'US':
      data.state = form.data["state"]
      data.provinces = None
    if form.data["country"] == 'CA':
      data.provinces = form.data["provinces"]
      data.state = None
   ....stuff here....
    data.save()

    user.first_name = form.data['first_name']
    user.last_name = form.data['last_name']
    user.save()

from registration.signals import user_registered
user_registered.connect(user_created)

ifステートメントは、保存時に期待したとおりに機能しません。

何が起こっているのかというと、選択されたオプション(州/県)の値は正しく保存されますが、反対側のオプションを空の値に更新できません。

たとえば、カナダの住所を持つユーザーがいて、それを米国の住所に更新したとします。米国の州は適切に保存されますが、州はNoneに更新されません。

4

1 に答える 1

0

おそらく、これを達成するためのよりエレガントな方法は、辞書を使用することです。余談ですが、フィールド名が単数形ではなく州(複数形)であることを確認しますか?辞書を使用してこれを行う方法の例を次に示します。ifステートメントを追加せずにさまざまな国のフィールドを追加でき、これらの辞書を返すための別のゲッター関数を作成することもできます。

def user_created(sender, user, request, **kwargs):
    form = RegistrationFormZ(request.POST)

    ....stuff here.....

    data.state = None
    data.provinces = None

    state_field = {}
    state_field['US'] = {}
    state_field['US']['src'] = form.data['state']
    state_field['US']['dest'] = data.state

    state_field['CA'] = {}
    state_field['CA']['src'] = form.data['province']
    state_field['CA']['dest'] = data.province


    state_field[form.data['country'].upper()]['dest'] = state_field[form.data['country'].upper()]['src']

    ....stuff here....
    data.save()

    user.first_name = form.data['first_name']
    user.last_name = form.data['last_name']
    user.save()

from registration.signals import user_registered
user_registered.connect(user_created)
于 2012-05-18T21:25:28.027 に答える