更新問題は解決されました。表示されるすべてのコードが機能します。
こんにちは!
TextPage と Paragraph の間に ForeignKey 関係があり、私の目標は、フロントエンドの TextPage を作成/編集するフォームを ModelAdmin に「インライン」であるかのように作成することです: 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
どんな助けでも大歓迎です。ありがとう!
更新します。インスタンス参照が追加されましたが、まだ機能しません - この文字列で ValidationError が発生します:
formset = PageFormSet(request.POST, instance=textpage, prefix='paragraphs')
何か案は?