如何在django模板中应用表单前缀
How to apply form prefix in django template
今天我在一个页面中有多个表单时遇到了很多麻烦。我的问题是对不同的 url 执行表单操作。它能够改变形式,所以即使 form.errors 也知道要显示的那个。我检查了 here,这是我去的地方,但仍然没有告诉我如何在 views.py 中定义这些表单后在 django 模板中显示它们。
这是我的观点
def TermAdd(request):
if request.method == 'POST':
form1 = SchoolFirstTermForm(request.POST, prefix="form1", request=request)
form2 = SchoolSecondTermForm(request.POST, prefix="form2", request=request)
form3 = SchoolThirdTermForm(request.POST, prefix="form3", request=request)
if form1.is_valid() and form2.is_valid() and form3.is_valid():
if 'term_add_button' in request.POST:
myterm = form1.save(commit=False)
myterm.session = session_dates
myterm.save()
messages.add_message(request, messages.SUCCESS, ("Administrator %s, The %s for %s Sessions were added successfully") % (request.user, myterm.name_of_term, session_dates.current_session))
return HttpResponseRedirect(reverse('school_session.views.SchoolTermAddView'))
else:
form1 = SchoolFirstTermForm(prefix="form1")
form2 = SchoolSecondTermForm(prefix="form2")
form3 = SchoolThirdTermForm(prefix="form3")
context = {'form1':form1, 'form2':form2, 'form3':form3, 'session_dates':session_dates, 'term_dates':term_dates}
return render_to_response('schools/admin_term_add.html', context, context_instance=RequestContext(request))
这里是models.py
class SchoolFirstTerm(models.Model):
session = models.ForeignKey(SchoolSession)
name_of_term = models.CharField(verbose_name="Name of Term", max_length=15, help_text="leave this except you want to change the name of your First Term to another word")
term_start = models.DateField()
term_end = models.DateField()
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __unicode__(self):
return "%s Term of %d/%d session" % (self.name_of_term, self.session.current_session)
class SchoolSecondTerm(models.Model):
session = models.ForeignKey(SchoolSession)
name_of_term = models.CharField(verbose_name="Name of Term", max_length=15, help_text="leave this except you want to change the name of your First Term to another word")
term_start = models.DateField()
term_end = models.DateField()
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __unicode__(self):
return "%s Term of %d/%d session" % (self.name_of_term, self.session.current_session)
class SchoolThirdTerm(models.Model):
session = models.ForeignKey(SchoolSession)
name_of_term = models.CharField(verbose_name="Name of Term", max_length=15, help_text="leave this except you want to change the name of your First Term to another word")
term_end = models.DateField()
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __unicode__(self):
return "%s Term of %d/%d session" % (self.name_of_term, self.session.current_session)
三个模型共享相同的字段,并且它们的表单要在同一页中,所以假设我有{{ form.name_of_term.errors }},我不知道如何添加我的表单前缀以 html 格式显示 <input type="text" name="form1-name_of_term" id="id_form1-name_of_term" />
我尝试了这个 {{ form.prefix }}{{ form.name_of_term }}
并且还阅读了一些答案,例如 How can I build multiple submit buttons django form?, Django: Display form name in template with prefix。我在那里得到了一些很酷的答案,但对我没有帮助。
毕竟我试过这个
{{ form1.name_of_term }}
只是让它像魅力一样工作。虽然我不知道也无法解释。我只是教过,既然我把它定义为 form1
,那么我应该能够检索到
的形式
今天我在一个页面中有多个表单时遇到了很多麻烦。我的问题是对不同的 url 执行表单操作。它能够改变形式,所以即使 form.errors 也知道要显示的那个。我检查了 here,这是我去的地方,但仍然没有告诉我如何在 views.py 中定义这些表单后在 django 模板中显示它们。
这是我的观点
def TermAdd(request):
if request.method == 'POST':
form1 = SchoolFirstTermForm(request.POST, prefix="form1", request=request)
form2 = SchoolSecondTermForm(request.POST, prefix="form2", request=request)
form3 = SchoolThirdTermForm(request.POST, prefix="form3", request=request)
if form1.is_valid() and form2.is_valid() and form3.is_valid():
if 'term_add_button' in request.POST:
myterm = form1.save(commit=False)
myterm.session = session_dates
myterm.save()
messages.add_message(request, messages.SUCCESS, ("Administrator %s, The %s for %s Sessions were added successfully") % (request.user, myterm.name_of_term, session_dates.current_session))
return HttpResponseRedirect(reverse('school_session.views.SchoolTermAddView'))
else:
form1 = SchoolFirstTermForm(prefix="form1")
form2 = SchoolSecondTermForm(prefix="form2")
form3 = SchoolThirdTermForm(prefix="form3")
context = {'form1':form1, 'form2':form2, 'form3':form3, 'session_dates':session_dates, 'term_dates':term_dates}
return render_to_response('schools/admin_term_add.html', context, context_instance=RequestContext(request))
这里是models.py
class SchoolFirstTerm(models.Model):
session = models.ForeignKey(SchoolSession)
name_of_term = models.CharField(verbose_name="Name of Term", max_length=15, help_text="leave this except you want to change the name of your First Term to another word")
term_start = models.DateField()
term_end = models.DateField()
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __unicode__(self):
return "%s Term of %d/%d session" % (self.name_of_term, self.session.current_session)
class SchoolSecondTerm(models.Model):
session = models.ForeignKey(SchoolSession)
name_of_term = models.CharField(verbose_name="Name of Term", max_length=15, help_text="leave this except you want to change the name of your First Term to another word")
term_start = models.DateField()
term_end = models.DateField()
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __unicode__(self):
return "%s Term of %d/%d session" % (self.name_of_term, self.session.current_session)
class SchoolThirdTerm(models.Model):
session = models.ForeignKey(SchoolSession)
name_of_term = models.CharField(verbose_name="Name of Term", max_length=15, help_text="leave this except you want to change the name of your First Term to another word")
term_end = models.DateField()
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __unicode__(self):
return "%s Term of %d/%d session" % (self.name_of_term, self.session.current_session)
三个模型共享相同的字段,并且它们的表单要在同一页中,所以假设我有{{ form.name_of_term.errors }},我不知道如何添加我的表单前缀以 html 格式显示 <input type="text" name="form1-name_of_term" id="id_form1-name_of_term" />
我尝试了这个 {{ form.prefix }}{{ form.name_of_term }}
并且还阅读了一些答案,例如 How can I build multiple submit buttons django form?, Django: Display form name in template with prefix。我在那里得到了一些很酷的答案,但对我没有帮助。
毕竟我试过这个
{{ form1.name_of_term }}
只是让它像魅力一样工作。虽然我不知道也无法解释。我只是教过,既然我把它定义为 form1
,那么我应该能够检索到