更新问题已解决,您可以看到的所有代码都可以使用.
你好!
我在TextPage和Paragraph之间有一个ForeignKey关系,我的目标是使前端TextPage创建/编辑表单就像在ModelAdmin中使用’inlines’一样:TextPage的几个字段,然后是内联堆叠的几个Paragraph实例.问题是我不知道如何验证和保存:
@login_required
def textpage_add(request):
profile = request.user.profile_set.all()[0]
if not (profile.is_admin() or profile.is_editor()):
raise Http404
PageFormSet = inlineformset_factory(TextPage, Paragraph, fields=('title', 'text', ), extra=5)
textpage = TextPage()
if request.POST:
textpageform = TextPageForm(request.POST, instance=textpage, prefix='page')
formset = PageFormSet(request.POST, instance=textpage, prefix='paragraphs')
# Saving data
if textpageform.is_valid():
textpageform.save()
if formset.is_valid():
formset.save()
return HttpResponseRedirect(reverse(consult_categories))
else:
textpageform = TextPageForm(instance=textpage, prefix='page')
formset = PageFormSet(instance=textpage, prefix='paragraphs')
return render_to_response('textpages/manage.html', { 'formset' : formset,
'textpageform' : textpageform,
}, context_instance=RequestContext(request))
我知道这是一种代码 – 猴子风格来发布你甚至不希望工作的代码,但我想展示我想要实现的目标.这是models.py的相关部分:
class TextPage(models.Model):
title = models.CharField(max_length=100)
page_sub_category = models.ForeignKey(PageSubCategory, blank=True, null=True)
def __unicode__(self):
return self.title
class Paragraph(models.Model):
article = models.ForeignKey(TextPage)
title = models.CharField(max_length=100, blank=True, null=True)
text = models.TextField(blank=True, null=True)
def __unicode__(self):
return self.title
任何帮助,将不胜感激.谢谢!
UPDATE.添加了实例引用,但仍无效 – 导致此字符串出现ValidationError:
formset = PageFormSet(request.POST, instance=textpage, prefix='paragraphs')
有任何想法吗?
最佳答案 具有实例引用的更新代码实际上工作正常!问题出在模板中:我忘记了ManagmentForm.这是模板代码:
{% extends "site_base.html" %}
{% block body %}
<form action="" method="post">
{{ textpageform.as_p }}
{{ formset.management_form }}
{% for form in formset.forms %}
<p>{{ form.as_p }}</p>
{% endfor %}
<input type="submit" value="Go" />
{% endblock %}
希望这个例子能帮助像我这样的新手:)