[英]Django ModelForm Template?
我想学习如何将模板添加到我的ModelForm我是新手。 您可以在下面看到我的models.py,url.py和views.py:
我的model.py看起来像这样:
from django.db import models
from django.forms import ModelForm
from django.contrib.auth.models import User
class Yazilar(models.Model):
yazi = models.CharField(max_length=200)
temsilci = models.ForeignKey(User)
class YaziForm(ModelForm):
class Meta:
model = Yazilar
我的views.py函数如下:
@login_required
def yazi_ekle(request):
yazim = YaziForm
return render_to_response('yazi/save.html', {'YaziForm': YaziForm})
我的url.conf如下所示:
(r'^yazi/save/$', 'tryout.yazi.views.yazi_ekle'),
我的问题是关于创建表单以及形成“action”参数的内容是什么?
在我看来,你的问题是在视图中,你应该做这样的事情:
@login_required
def yazi_ekle(request):
yazim = YaziForm() # Look at the (), they are needed for instantiation
return render_to_response('yazi/save.html', {'YaziForm': yazim}) # Sending the form instance to the context, not the form class
现在,您在模板上下文中有一个名为YaziForm的变量。 Django默认将小部件表格自动装配到一堆表行,所以在你的文件yazi / save.html中,这样做
<form method="post" action="">
{% csrf_token %}
<table>
{{YaziForm}}
</table>
<input type="submit" value="Submit Form"/>
</form>
这将自动将表单呈现为表格,但您必须在POST下添加表单的逻辑。
您实际上可以使用<form action="">
因为您要发布的网址与您所在的网址相同。
如果您不喜欢,那么只要您在settings.py中的TEMPLATE_CONTEXT_PROCESSORS中有'django.core.context_processors.request',我认为您也可以这样做:
<form action="{{ request.path }}">
一如既往,请参阅文档:)
http://docs.djangoproject.com/en/1.1/ref/request-response/#django.http.HttpRequest.path
如果在这个问题发布后的第一年中,海报仍未尝试阅读ModelForm文档...... http://docs.djangoproject.com/en/1.2/topics/forms/modelforms/
是的,视图错误,您已实例化表单。 您还需要一些逻辑来处理发布数据。 如果它是一个编辑视图,您可能还希望视图在视图args中获取项ID,并具有一些逻辑来加载该模型实例。
例如:
@login_required
def yazi_ekle(request, id=None):
form_args = {}
if id is not None:
# edit an existing Yazilar
try:
yazilar = Yazilar.objects.get(pk=id)
except Yazilar.DoesNotExist:
return Http404('Yazilar not found')
form_args['instance'] = yazilar
# else create new Yazilar...
if request.POST:
form_args['data'] = request.POST
yazi_form = YaziForm(**form_args)
if yazi_form.is_valid():
yazilar = yazi_form.save(commit=True)
else:
yazi_form = YaziForm(**form_args)
return render_to_response('yazi/save.html',
{
'yazi_form': yazi_form
},
context_instance=RequestContext(request)
)
然后在你的urls.py中:
(r'^yazi/ekle/(?P<id>\d+)?$', 'tryout.yazi.views.yazi_ekle'),
并在模板中:
<form method="post" action="">
{% csrf_token %}<!-- required since Django 1.2 or later -->
<ul>
{{ yazi_form.as_ul }}
</ul>
<input type="submit" value="Submit Form"/>
</form>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.