Django:通过实例方法调用ModelForm-单独的字段
是否可以使用类方法输出ModelForm;例如:Django:通过实例方法调用ModelForm-单独的字段,django,forms,Django,Forms,是否可以使用类方法输出ModelForm;例如: def edit_form(self, *args, **kwargs): from smf.node.forms import MediaBaseForm return MediaBaseForm(instance=self) (MediaBaseForm是模型媒体的模型表单子类),然后在视图中: form = node.edit_form() (node contains the instance) 此代码执行时不会引发错
def edit_form(self, *args, **kwargs):
from smf.node.forms import MediaBaseForm
return MediaBaseForm(instance=self)
(MediaBaseForm是模型媒体的模型表单子类),然后在视图中:
form = node.edit_form()
(node contains the instance)
此代码执行时不会引发错误;但是,在查看页面时,当我尝试单独呈现每个字段时,不会生成任何表单字段。当我使用{{formset}}
但不使用{%forformset.forms%}中的表单时,表单确实会显示。{%endfor%}
-->
我需要这个:
{{ formset.management_form }}
{% for form in formset.forms %}
{{ form.id }}
<div id="form_title">Title: {{ form.title }}</div>
<p>Description:</p> {{ form.description }}
<p>Comment settings:</p> {{ form.comment }}
<p>Promoted to frontpage:</p> {{ form.promote }}
<p>Sticky:</p> {{ form.sticky }}
<p>Ready for Publishing:</p> {{ form.status }}
{% endfor %}
这样叫表单是不可能的,还是我做错了什么
完整视图:
def node_edit(request, nid):
#Build the standard node form
node = node_load(nid)
obj = node_get_model(node.type, True)
#modelFormset = modelformset_factory(obj, max_num=1)
form = node.edit_form()
if request.method == 'POST': # If the form has been submitted...
#form = modelFormset(request.POST, request.FILES)
form = node.edit_form()
if form.is_valid():
instances = form.save(commit=False)
for instance in instances:
instance.save()
node_post_process(node, request, obj)
if 'save_edit' in request.POST:
id = int(nid)
return HttpResponseRedirect('/edit/%i' %(id))
if 'save' in request.POST:
#id = node_callback_value.Node_ptr
id = int(nid)
return HttpResponseRedirect('/content/%i' %(id))
if 'savenew' in request.POST:
return HttpResponseRedirect('/content/add/%s' %(node.type))
else:
output = {}
#form = modelFormset(queryset=obj.objects.filter(node_ptr=nid))
form = node.edit_form(instance=node)
output = {
'formset': form,
'node': node,
}
try:
return render_to_response('node/forms/%s.edit.html' %(node.type), output)
except TemplateDoesNotExist:
return render_to_response('node/forms/default.form.html', {
'formset': form,
})
我不明白你想干什么。不过,您的方法存在许多问题 首先,无法将发布的值传递给表单实例化。因此,
form.is\u valid()
将始终为False
其次,node.edit_form()的结果似乎是单个表单,而不是表单集。所以我不知道为什么您要将它作为
formset
传递到模板上下文,并尝试遍历formset.forms
您确定是指“类方法”吗?类方法将类作为第一个参数传递,而不是实例。从视图传递到模板的上下文是什么?我怀疑你想做{{form}}
而不是{%for formset.forms%}
,但是如果没有看到视图的其余部分,就无法确定。很抱歉,信息不完整,请编辑以提供。谢谢,我找到了最后一件事,但无法了解它工作的原因。现在我知道了;)你知道如何做到这一点吗?
def node_edit(request, nid):
#Build the standard node form
node = node_load(nid)
obj = node_get_model(node.type, True)
#modelFormset = modelformset_factory(obj, max_num=1)
form = node.edit_form()
if request.method == 'POST': # If the form has been submitted...
#form = modelFormset(request.POST, request.FILES)
form = node.edit_form()
if form.is_valid():
instances = form.save(commit=False)
for instance in instances:
instance.save()
node_post_process(node, request, obj)
if 'save_edit' in request.POST:
id = int(nid)
return HttpResponseRedirect('/edit/%i' %(id))
if 'save' in request.POST:
#id = node_callback_value.Node_ptr
id = int(nid)
return HttpResponseRedirect('/content/%i' %(id))
if 'savenew' in request.POST:
return HttpResponseRedirect('/content/add/%s' %(node.type))
else:
output = {}
#form = modelFormset(queryset=obj.objects.filter(node_ptr=nid))
form = node.edit_form(instance=node)
output = {
'formset': form,
'node': node,
}
try:
return render_to_response('node/forms/%s.edit.html' %(node.type), output)
except TemplateDoesNotExist:
return render_to_response('node/forms/default.form.html', {
'formset': form,
})