die*_*ell 25 django django-forms
我决定学习Django Forms.有一段时间了,我一直在使用HTML表单,因为我很难与Django Forms达成协议.
我怎么能将初始数据填充到Django Forms?例:
考虑是否填充了这些模型.包含数据.
models.py
class Game(models.Model):
title = models.CharField()
genre = models.CharField()
Run Code Online (Sandbox Code Playgroud)
所以,如果我有
view.py
game_list = Game.objects.all()
return render_to_response('template',locals())
Run Code Online (Sandbox Code Playgroud)
所以在template.html中,我可以:
{% for game in game_list %}
<p> game.title <p> <br /> <p> game.genre <p>
Run Code Online (Sandbox Code Playgroud)
如果我想在使用HTML表单时填充初始数据,这就是我通常所做的:
{% for game in game_list %}
<form action= '/add/' method='POST'>
<input="text" name="title" value="{{game.title}}" />
<input="text" name="genre" value="{{game.genre}}" />
<input type="submit" />
Run Code Online (Sandbox Code Playgroud)
我怎么能在Django Forms中这样做?从我通过在线阅读文章看到的,他们通过覆盖使用forms.__init__:
class Anyforms(forms.Form):
super(Anyforms, self).__init__(*args,**kwargs)
Run Code Online (Sandbox Code Playgroud)
我无法掌握如何填充使用super.表单在运行时获取的数据是什么?我可以阅读的任何好的链接让我和Django Forms争吵吗?
这是
<input="text" name="title" value="{{game.title}}" />
<input="text" name="genre" value="{{game.genre}}" />
Run Code Online (Sandbox Code Playgroud)
相当于这个?
data = {'title':'{{game.title}}','genre':'{{game.genre}}'}
form(data)
Run Code Online (Sandbox Code Playgroud)
变量是否会在模板中被替换?
ars*_*ars 25
S. Lott的回答告诉您如何使用视图中的某些数据初始化表单.要在模板中呈现表单,请参阅包含许多示例的django文档的以下部分:
虽然这些示例显示渲染是从python解释器开始工作的,但在模板中执行时也是如此.
例如,代替print f,您的模板将只包含:{{ f }}假设您通过上下文传递表单f.同样,f.as_p()在模板中写为{{ f.as_p }}.这在" 变量"部分下的django模板文档中进行了描述.
更新(回复评论)
不完全是,模板表示法仅适用于模板.您的表单和相关数据在视图中初始化.
因此,使用您的示例,您的视图将包含以下内容:
def view(request):
game = Game.objects.get(id=1) # just an example
data = {'id': game.id, 'position': game.position}
form = UserQueueForm(initial=data)
return render_to_response('my_template.html', {'form': form})
Run Code Online (Sandbox Code Playgroud)
然后你的模板会有类似的东西:
{{ form }}
Run Code Online (Sandbox Code Playgroud)
或者,如果您想自己自定义HTML:
{{ form.title }} <br />
{{ form.genre }} <br />
Run Code Online (Sandbox Code Playgroud)
等等.
我建议尝试一下并试验一下.如果遇到问题,请问一个问题.
http://docs.djangoproject.com/en/1.2/ref/forms/api/#ref-forms-api-bound-unbound
要将数据绑定到表单,请将数据作为字典作为第一个参数传递给Form类构造函数:
>>> data = {'subject': 'hello',
... 'message': 'Hi there',
... 'sender': 'foo@example.com',
... 'cc_myself': True}
>>> f = ContactForm(data)
Run Code Online (Sandbox Code Playgroud)
您可以尝试以下操作吗:
from django.forms.models import model_to_dict
def view(request):
game = Game.objects.get(id=1)
form = UserQueueForm(initial=model_to_dict(game))
return render_to_response('my_template.html', {'form': form})
Run Code Online (Sandbox Code Playgroud)
在 Django 1.8 上对我来说很好用
使用 CBV 时,您可以覆盖 FormMixinget_initial()以将初始数据填充到表单中。
例子:
class MyView(FormView):
def get_initial(self):
initial = super(MyView, self).get_initial()
initial['start_date'] = datetime.date.today()
return initial
Run Code Online (Sandbox Code Playgroud)
请参阅文档。
| 归档时间: |
|
| 查看次数: |
45353 次 |
| 最近记录: |