2010-04-01 2 views
4

UPDATE Проблема решена, весь код, который вы видите, работает.Одна форма для двух моделей

Hello!

У меня есть отношения ForeignKey между TextPage и Paragraph, и моя цель состоит в том, чтобы сделать текстовую форму для создания/редактирования Front-end Text-Text так, как если бы она была в 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)) 

Я знаю, что это своего рода стиль кода обезьяны размещать код, который вы даже не рассчитывать на работу, но я хотел показать что я пытаюсь выполнить. Речь идет о соответствующей части моделей.:

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 

Любая помощь будет принята с благодарностью. Благодаря!

ОБНОВЛЕНИЕ. ссылки Instance добавил, но по-прежнему не работает - результаты в ValidationError на этой строке:

formset = PageFormSet(request.POST, instance=textpage, prefix='paragraphs') 

Любые идеи?

+0

Я хотел бы помочь, но я не думаю, что у меня есть хороший ответ. Если вы не получите никаких ответов и каким-то образом выясните, не могли бы вы ответить на вопрос? –

+0

, конечно же, я буду :) – martinthenext

ответ

2

Обновленный код с ссылками на экземпляры на самом деле работает нормально! Проблема была в шаблоне: я забыл 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 %} 

Надежда этот пример помогает новичкам, как я :)

Смежные вопросы