投稿されていないDjangoのフォームセットのデータを追加しました。たとえば、ユーザーの教育について質問するフォームから始めます。ユーザは、追加ボタンを押して、同じフォームを追加して、中等教育(例えば、大学院)に関する情報を入力することができます。フォームがブラウザに追加されると、Iは、入力データを得るが、私は、データを投稿すると、それだけブラウザで第二の形態からの情報をフォームセット内の1つの形態を示しています。は動的に私が動的にDjangoのフォームセットにフォームを追加してJavaScript/jQueryのを使用してフォームセットを変更しています
ValidationError: [u'ManagementForm data is missing or has been tampered with']
:
POSTデータは
edu-0-degree u'Doctorate'
first_name u'User'
last_name u'One'
Submit u'Submit'
edu-0-date_started u'01/01/12'
edu-MIN_NUM_FORMS u'0'
edu-0-school u'School Two'
edu-INITIAL_FORMS u'0'
edu-MAX_NUM_FORMS u'1000'
edu-0-date_finished u'01/01/16'
edu-0-id u''
edu-TOTAL_FORMS u'2'
csrfmiddlewaretoken u'qgD2supjYURWoKArWOmkiVRoBPF6Shw0'
私はその後、というエラーを取得しています。ここ
コードの関連部分である:(私は、同じ結果にform.has_changed()
ピースなしに試みたここ)
views.py
def build_profile(request):
EducationFormset = modelformset_factory(EducationModel, AddEducationForm, extra=1)
if request.method == "POST":
education_formset = EducationFormset(request.POST, prefix='edu')
for form in education_formset:
if form.is_valid() and form.has_changed():
education = EducationModel(
school = form.cleaned_data['school'],
date_started = form.cleaned_data['date_started'],
date_finished = form.cleaned_data['date_finished'],
degree = form.cleaned_data['degree'],
user = current_user
)
education.save()
return HttpResponseRedirect(reverse('private', args=[current_user.username]))
context = {
'edu_formset' : forms['education'],
}
return render(request, "build_profile.html", context)
build_profile.html
テンプレート10 build_profile.js私が間違って何をやっている
function updateElementIndex(el, prefix, ndx) {
var id_regex = new RegExp('(' + prefix + '-\\d+)');
var replacement = prefix + '-' + ndx;
if ($(el).attr("for")) $(el).attr("for", $(el).attr("for").replace(id_regex, replacement));
if (el.id) el.id = el.id.replace(id_regex, replacement);
if (el.name) el.name = el.name.replace(id_regex, replacement);
}
function addForm(btn, prefix) {
var formCount = parseInt($('#id_' + prefix + '-TOTAL_FORMS').val());
var row = $('.dynamic-form:first').clone(true).get(0);
$(row).removeAttr('id').insertAfter($('.dynamic-form:last')).children('.hidden').removeClass('hidden');
$(row).children().not(':last').children().each(function() {
updateElementIndex(this, prefix, formCount);
$(this).val('');
});
$(row).find('.delete-row').click(function() {
deleteForm(this, prefix);
});
$('#id_' + prefix + '-TOTAL_FORMS').val(formCount + 1);
return false;
}
function deleteForm(btn, prefix) {
$(btn).parents('.dynamic-form').remove();
var forms = $('.dynamic-form');
$('#id_' + prefix + '-TOTAL_FORMS').val(forms.length);
for (var i=0, formCount=forms.length; i<formCount; i++) {
$(forms.get(i)).children().not(':last').children().each(function() {
updateElementIndex(this, prefix, i);
});
}
return false;
}
$(document).ready(function() {
$('.add-row').click(function() {
return addForm(this, 'edu')
});
$('.delete-row').click(function() {
return deleteForm(this, 'edu')
});
});
(動的フォームセットにフォームを追加するコード)?
私はカップルの質問があります。 1.フォームのhtmlには、0インデックスのformsetのフィールドの値があります。そこから来ているのはどこですか? 2.あなたのmanagement_formフィールドにデータを投稿していますか?投稿データがどのように表示されるか教えてください。 3.投稿しようとするたびにエラーが表示されるのですか、フォームを追加した場合にのみ表示されますか? –
@RobVezina:私は私のポストデータではなく、私が以前に含まれていたprint文を含めるように私の質問を編集しました。ブラウザには2つのフォームが記入されていましたが、投稿データには1つしか表示されていないようです。フォームを追加したかどうかにかかわらず、投稿しようとするたびにエラーが表示されます。 – eswens13