Я использую YUI 3.0 io для отправки данных формы с помощью ajax. Поля формы создаются из представления django (ModelForm). При первой загрузке формы я обновляю поле и отправляю форму с помощью YUI onclick, который вызывает обратный вызов io, который запускает представление django и снова возвращает ModelForm с данными обновления. Это работает один раз (сохраняет в базу данных, отображает данные обновления в форме). После этого поля формы обновления не распознаются, и когда я снова отправляю сообщение POST, новые изменения не регистрируются.
//Ajax call to Load Member Info
YUI().use("node-base", "io-form","node", function(Y) {
var formObj = Y.one('#MemberForm')
var uri = "http://localhost:8000/MemberInfo/{{ member_id }}";
var cfg = {
method:'POST',
form: {
id: formObj
}
}
function complete(id, o) {
var id = id; // Transaction ID.
var data = o.responseText; // Response data.
document.getElementById('InputDiv').innerHTML = data;//the data is the memberinfo html template w/ data
};
function start(transactionid, arguments)
{
document.getElementById('InputDiv').innerHTML = "processing...";
}
Y.on('io:complete', complete, this);
Y.on('io:start', start, this);
var request = Y.io(uri);//run callback on load. don't POST, just load'
function LoadMemberAjax()
{
Y.io(uri, cfg);//callback, POST.
}
Y.on("click", LoadMemberAjax, "#btnMemberInfo");
}
);
#Load Member Info - ajax call
def MemberInfo(request, member_id):
existingMember = get_object_or_404(Member, pk=member_id)
if request.method == "POST":
if 'userlogin' in request.POST: #we will get username and pwd from login and find person
NewMember = MemberForm(instance=existingMember)
else:
f = MemberForm(request.POST, instance = existingMember)
if f.is_valid():
f.save()
NewMember = MemberForm(instance=existingMember)
else:
NewMember = MemberForm(instance=existingMember)
return render_to_response("MemberInfo.html", {"Member": NewMember,})
HTML:
<body>
<form id="MemberForm">
<div id="InputDiv">Loading Your Member Information...One Moment...
</div>
<input type="button" id="btnMemberInfo" value="save">
</form>
Шаблон из Django возвращается как 'data'
{% for field in Member %}
{{ field.label_tag }}
{{ field }}
{% endfor %}