2012-05-18 2 views
0

В настоящее время у меня есть форма, которая позволяет пользователю редактировать свой профиль (django-profiles). Форма работает отлично, за исключением того, что я поставил переключатель для штатов и провинций в зависимости от того, не выбирает ли пользователь Канада или США.Django Issue Setting Empty String

В моей модели у меня есть как государство, так и провинция, так что в таблице есть 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) 

Условный заявления не работает, как я ожидал, что они при сохранении.

Что происходит, так это то, что он правильно сохраняет значение выбранной опции (state/province), но затем не обновляет противоположное до пустого значения.

Итак, допустим, у меня был пользователь, у которого был канадский адрес, а затем обновил его до адреса США. Государство США получает правильное сохранение, но провинция не обновляется до None.

+1

Почему бы не использовать [cleaned_data ] (https://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-a-specific-field-attribute)? – danihp

+0

Являются ли «США» и «CA» определенными ключами для соответствующих стран? И не следует ли вызывать form.save(), а не data.save()? Что такое «данные»? – Tom

+0

Да, они определенно являются ключами. data = newform.BetaProfile (user = user) Я просто не включил его в свое первоначальное сообщение. То, что у меня было, чтобы сохранить правильное значение состояния/провинции, просто не обновляет противоположную, если ее нет. – plumwd

ответ

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)