ОБНОВЛЕНИЕ Проблема решена, весь код, который вы видите, работает.
Здравствуйте! * * 1005
У меня есть отношение ForeignKey между TextPage и Paragraph, и моя цель состоит в том, чтобы создать внешнюю форму 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')
Есть идеи?