имя attr связано с именем свойства, используемого для поля.
Из вашего описания («Если эта другая форма изменяет имена любого из ее полей, мне нужно изменить имена полей в моей форме, а затем изменить эти имена везде в моем приложении - с тех пор», «Если удаленная форма использует глупые имена, тогда мой объект формы также должен иметь свойства с глупыми именами, которые загрязняют код моего приложения. ") Вы признаете это хрупким дизайнерским решением.
Вы должны учитывать, что ваша функция просмотра полностью решает эту проблему тривиальным способом.
Вместо того, чтобы выравнивать имена между удаленным приложением и вашим приложением, используйте функции просмотра, чтобы сопоставить ваши красивые имена с их ужасными именами.
Для этого предназначены функции просмотра.
Чтобы продвинуться дальше, ваша функция просмотра делает три вещи.
- Проверка входных данных. Возможно, сохраните их в какой-нибудь локальной базе данных.
- Сопоставьте данные из вашей формы с их структурой запроса.
- Сделайте удаленный запрос (через
httplib
или urllib2
или как угодно).
Пункты 1 и 3 не сильно меняются.
Элемент 2 представляет собой сопоставление поля по полю из request.POST со словарем, который вы затем используете с помощью lib.urlencode для создания запроса POST. (Или каким бы ни был протокол.)
Так что разбейте пункт 2 на гибкую вещь, которую вы указываете в своих настройках.
Настройки
MY_MAPPING_FUNCTION = module.function
В твоих views.py
def submit( request ):
if request.method == POST:
form = SomeForm( request.POST )
if is_valid(form):
form.save()
to_be_submitted = settings.MY_MAPPING_FUNCTION( form )
remote_post( to_be_submitted ) # or whatever your protocol is
Добавьте модуль сопоставления в ваше приложение
module.py
def version_1_2( form ):
return {
'silly_name_1': form.cleaned_data['your_nice_name'],
'from': form.cleaned_data['another_nice_name'],
}
def version_2_1( form ):
return {
'much_worse_name': form.cleaned_data['your_nice_name'],
'from': form.cleaned_data['another_nice_name'],
}