我目前有一个表单,允许用户编辑他们的个人资料(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语句没有像我预期的那样有效。
正在发生的是它正确保存了所选选项(州/省)的值,但却无法将对方的值更新为空值。
例如,假设我有一个拥有加拿大地址的用户,然后将其更新到美国地址。美国州得到妥善保存,但省没有更新为无。
答案 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)