Django问题设置空字符串

时间:2012-05-18 20:53:30

标签: django string if-statement

我目前有一个表单,允许用户编辑他们的个人资料(django-profiles)。该表格运作良好,但我已根据用户是选择加拿大还是美国而为州和省设置了一个转换。

在我的模型中,我设置了州和省,以便在表格中有2个单独的字段。

在我的保存方法中,我有以下内容:

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语句没有像我预期的那样有效。

正在发生的是它正确保存了所选选项(州/省)的值,但却无法将对方的值更新为空值。

例如,假设我有一个拥有加拿大地址的用户,然后将其更新到美国地址。美国州得到妥善保存,但省没有更新为无。

1 个答案:

答案 0 :(得分:0)

或许更优雅的方法是使用字典。顺便说一句,你确定你的字段名称是省(复数)而不是单数吗?以下是如何使用词典执行此操作的示例,请注意,您可以为不同的国家/地区添加更多字段而不需要更多if语句,您甚至可以编写单独的getter函数来返回这些词典:

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)