2013-06-19 4 views
0

У меня возникли трудности с попыткой добавить немного больше сложности в мою Форма регистрации регистрации на моем сайте, написанном на Django. Итак, вот в чем дело:Работа с наборами форм внутри форм-форм

Когда пользователь создает новый вызов, они должны планировать встречи и Проекты. Я хотел бы создать форму так, чтобы все было определено на одной странице.

Вот мои модели:

class Challenge(models.Model): 
    description = models.TextField() 
    name = models.CharField(verbose_name=_("What is the challenge?"), max_length=60) 
    url = models.URLField(verbose_name=_("URL"), blank=True) 
    solutions = models.TextField(verbose_name=_("What are the justifications for the challenge?"), blank=True) 
    prize_description = models.TextField(verbose_name=_("What are the prizes for the participants?"), blank=True) 

    subjects = models.ManyToManyField(Subject, verbose_name=_("What kind of subjects participants can learn?"), blank=True) 
    skills = models.ManyToManyField(Skill, verbose_name=_("What skills and abilities do you want to promote?"), blank=True) 

    def __unicode__(self): 
     return self.name 

class Meeting(models.Model): 
    start_date = models.DateField(verbose_name=_("Start Date")) 
    end_date = models.DateField(verbose_name=_("End Date")) 
    start_time = models.TimeField(verbose_name=_("Start Time")) 
    end_time = models.TimeField(verbose_name=_("End Time")) 
    summary = models.CharField(max_length=60) 
    description = models.TextField() 
    challenge = models.ForeignKey(Challenge) 

    def __unicode__(self): 
     return self.summary; 

class Project(models.Model): 
    start_time = models.TimeField(verbose_name=_("Start Time")) 
    end_time = models.TimeField(verbose_name=_("End Time")) 
    description = models.CharField(max_length=255) 
    meeting = models.ForeignKey(Meeting) 

    def __unicode__(self): 
     return self.description; 

И вот моя форма:

@login_required(login_url='/accounts/login/') 
def new_challenge(request, template_name='challenges/new.html'): 
    MeetingInlineFormSet = inlineformset_factory(Challenge, Meeting, form=MeetingForm, extra=1) 
    ProjectInlineFormSet = inlineformset_factory(Meeting, Project, form=ProjectForm) 

    if request.method == 'POST': 
     challenge_form = ChallengeForm(request.POST) 
     meeting_inline_formset = MeetingInlineFormSet(request.POST, instance=Challenge()) 
     project_inline_formset = ProjectInlineFormSet(request.POST, instance=Meeting()) 

     if challenge_form.is_valid(): 
      challenge = challenge_form.save() 

      if meeting_inline_formset.is_valid(): 
       for meeting_form in meeting_inline_formset:    
        meeting = meeting_form.save(commit=False)       
        meeting.challenge = challenge 
        meeting.save() 

      return HttpResponseRedirect(reverse('challenges.views.challenge_detail', args=(challenge.pk,))) 
    else: 
     challenge_form = ChallengeForm() 
     meeting_inline_formset = MeetingInlineFormSet(instance=Challenge()) 
     project_inline_formset = ProjectInlineFormSet(instance=Meeting()) 

    c = {'challenge_form': challenge_form, 
     'meeting_inline_formset' : meeting_inline_formset,         
     'project_inline_formset': project_inline_formset } 

    return render_to_response(template_name, c, context_instance=RequestContext(request)) 

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

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

ответ

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