У меня возникли трудности с попыткой добавить немного больше сложности в мою Форма регистрации регистрации на моем сайте, написанном на 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))
Вопрос заключается в том, я не мог понять, что я должен сделать, чтобы сохранить проекты внутри заседаний. У задачи много встреч, и на каждой встрече у меня есть набор форм, содержащий формы проектов, но я не могу найти способ рассказать, какие проекты принадлежат тем, на каких собраниях.
Есть ли способ решить эту проблему? Я думал об использовании некоторых скрытых полей, чтобы получить эту информацию из пользовательского интерфейса. Какие-либо предложения?