我有一个问题对象具有一个外键字段的讨论对象。我正在尝试使用讨论ModelForm和问题内联formset来呈现表单。当它向页面呈现空白表单时,一切正常,所有字段都是他们需要的地方。错误是,我有JQuery,允许用户添加更多的问题,如果他们希望通过附加HTML完全相同的其他问题输入和标签与适当的名称值。它最初只是为这个问题提供了三个空的文本区域。在我的视图函数中,我同时保存了讨论模型表单和带有request.POST数据的Inline表单。我可以在POST中看到所有的数据,甚至是附加的问题都存在,但是当我将它们重定向到一个页面以查看新讨论对象及其相关字段的只读版本时,总是只有三个问题,而不是4+。Django嵌入式框架只保存三个对象
视图
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 %}
这工作!感谢Curtis,我知道在我的JQuery中追加所有的html时可能会丢失一些东西,就是这样。 – JBT