У меня есть объект вопроса, который имеет поле внешнего ключа для объекта обсуждения. Я пытаюсь отобразить форму, используя ModelForm для обсуждения и вопрос Inline formset. Когда он выводит пустую форму на страницу, все работает нормально, и все поля находятся там, где они должны быть. Ошибка в том, что у меня есть JQuery, который позволяет пользователю добавлять дополнительные вопросы, если они хотят, добавляя html, точно идентичный другим входным данным вопроса и меткам с соответствующими значениями имен. Первоначально он просто помещает три пустых текстовых поля для вопроса. В моей функции просмотра я сохраняю как форму обсуждения модели, так и встроенную форму с данными request.POST. Я вижу в POST, что все данные, даже добавленные вопросы, есть, но когда я перенаправляю их на страницу, чтобы увидеть версию нового объекта обсуждения и связанных с ним полей только для чтения, всегда есть только три вопроса, вместо 4+.
Посмотреть
def new_discussion(request):
member = get_member(request)
if request.method == 'POST':
form = DiscussionForm(data=request.POST)
QuestionInlineFormSet = inlineformset_factory(Discussion, Question, fields='__all__')
if form.is_valid():
created_discussion = form.save(commit=False)
formset = QuestionInlineFormSet(request.POST, instance=created_discussion)
if formset.is_valid():
created_discussion.community = member.community
created_discussion.save()
formset.save()
return HttpResponseRedirect('/user/discussions/')
шаблон
{% extends 'member/discussions.html' %}
{% block extra-head %}
<script src='//cdn.tinymce.com/4/tinymce.min.js'></script>
<script>
var count = {{ questions|length }};
$(document).ready(function(){
$('#add_question').on('click', function(e){
e.preventDefault()
console.log(count)
var form = $('.form-data')
form.append('<div class="col-xs-12 extra-' + count + ' form-group"></div>')
$('#question-count').val(count)
var extra = $('.extra-' + count)
extra.append('<label for="id_question_set-' + count + '-question">Question:</label>')
extra.append('<textarea cols="40" id="id_question_set-' + count + '-question" maxlength="200" name="question_set-' + count + '-question" rows="10"></textarea>')
extra.append('<label for="id_question_set-' + count + '-scripture">Scripture:</label>')
extra.append('<input id="id_question_set-' + count + '-scripture" maxlength="30" name="question_set-' + count + '-scripture" type="text">')
extra.append('<label for="id_question_set-' + count + '-display_order">Display order:</label>')
extra.append('<input id="id_question_set-' + count + '-display_order" name="question_set-' + count + '-display_order" type="number" value="1">')
extra.append('<label for="id_question_set-' + count + '-DELETE">Delete:</label>')
extra.append('<input id="id_question_set-' + count + '-DELETE" name="question_set-' + count + '-DELETE" type="checkbox">')
extra.append('<input id="id_question_set-' + count + '-discussion" name="question_set-' + count + '-discussion" type="hidden">')
extra.append('<input id="id_question_set-' + count + '-id" name="question_set-' + count + '-id" type="hidden">')
count += 1
})
})
tinymce.init({
selector: '#id_content',
plugins : 'media code',
media_alt_source: true,
media_poster: false,
media_dimensions: false
});
</script>
{% endblock %}
{% block discussion %}
<form method='POST' id='discussion-form'>
<div class="form-data">
{% csrf_token %}
<div class='col-xs-12 form-group'>
<label for='id_title'>Title</label>
{{ form.title }}
</div>
<div class='col-xs-12 form-group'>
<label for='mytextarea'>Content</label>
{{ form.content }}
</div>
<div class='col-xs-12 form-group'>
<label for='id_audio'>Audio</label>
{{ form.audio }}
</div>
<input type="hidden" id="question-count" name="question-count" value='0'>
<div class="col-xs-12">
{{ questions }}
</div>
</div>
<button class="btn btn-info" style="margin-left: 15px; margin-bottom: 10px;" id="add_question">Add Question</button>
<br>
<div class='btn-wrapper col-xs-12'>
<input id='save' type='submit' class='btn btn-primary' style="margin-right: 10px;" value='Save' />
{% if view %}
<a class='btn btn-primary' style="margin-right: 10px;" href='/user/discussions/edit/{{ discussion.id }}/preview/'>
View
</a>
{% endif %}
<!-- <input id='preview' type='submit' class='btn btn-primary' style="margin-right: 20px;" value='Preview' /> -->
<a href="/user/dashboard" class='btn btn-warning'>Back to dashboard</a>
</div>
</form>
{% block discussion_nav %}
{% endblock %}
{% endblock %}