短
我想创建一个应用程序,它提供格式正确的表单,可以导入到其他应用程序中。使用ModelForm
之外的任何操作都可以获得部分成功,因为它只渲染表单字段而没有任何额外需要的元素,如按钮。但是,这也应该封装在应用程序中。
长:
为了更好地理解,我们假设我们有一个名为blog
的应用程序和一个名为comments
的应用程序。由于评论也可能在其他地方和应用中使用,因此它们已被分开。 comments
应提供一个表单,然后将其添加到blog
所以这里有一些伪代码以便更好地理解。
评论/ models.py:
class Comment(models.Model):
comment = models.TextField()
author = models.CharField(max_length=64)
评论/ forms.py:
class CommentForm(forms.ModelForm)
class Meta:
model = Comment
评论/模板/评论/ comment_form.html:
<form method="post" action="#">
{{ formfields }}
<button type="submit">Submit</button>
</form>
显然,由于ModelForm
并且模板没有放在一起,因此缺少一个步骤。我现在的目标是将这种婚姻直接导入blog
博客/ views.py
def render_article(request):
context = {
...
comment_form: <SOMETHING THAT CREATES A NICE TEMPLATE BASED HTML FORM>
}
return render(request, 'blog/article.html', context)
本质上,我正在寻找一个单一的功能对象,我可以在任何类型的应用程序中使用它来提供完整的表单。这样,它在所有应用程序中看起来都一样。
怎么做?
答案 0 :(得分:0)
您可以在表单中覆盖django.forms.Form.__unicode__
:
from django.utils.safestring import mark_safe
class MyForm(forms.Form):
...
def __unicode__(self):
html = super(MyForm, self).__unicode__
html = html + '<button type="submit">Submit</button>'
// or whatever — render a wrapper template, anything
return mark_safe(html)