Nic*_*ner 8 javascript django django-templates django-admin
在我的Django 1.2.4站点中,我想将用户引导到一个管理页面,该页面预先填写了一些值,基于他们正在使用的当前数据.例如:
{% for person in people %}
<tr>
<td>{{person}}</td>
<td><a href='admin/foo/bar/add?name={{person}}'>Create a foo for {{person}}</td>
</tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
然后,当用户单击该链接时,该name字段将预先填充该值{{person}}.
Django Admin界面是否支持这样做?Django管理表单使用POST,但我不确定如何将POST数据添加到模板的请求中.
或者,我可以设置GET变量,然后在表单中使用自定义JavaScript来相应地设置值.
Rei*_*cke 13
根据源代码(和快速测试),Django支持使用GET参数作为管理员中模型形式的初始值.它甚至支持多对多关系.
你试过这个吗?也许这是网址末尾缺少的斜线.
admin/foo/bar/add?name=Foobar
Run Code Online (Sandbox Code Playgroud)
可能会被重定向到......
admin/foo/bar/add/
Run Code Online (Sandbox Code Playgroud)
...因此放弃了查询字符串.因此,尝试在那里添加斜杠,看看它是否有效.
admin/foo/bar/add/?name={{ person }}
Run Code Online (Sandbox Code Playgroud)
更新(预填充布尔字段)
以防其他人在预填充布尔字段时出现问题:
如果你在查询字符串中传递任何值,例如admin/foo/bar/add/?is_active=foo,这将is_active使用True预填充该字段(因为任何非空字符串都是真值).因此,如果要"取消选中"给定字段的复选框,则根本不传递任何值,例如admin/foo/bar/add/?is_active=
这是负责将GET参数用作初始值的add_view方法的代码片段ModelAdmin.
http://code.djangoproject.com/browser/django/trunk/django/contrib/admin/options.py#L878
# Prepare the dict of initial data from the request.
# We have to special-case M2Ms as a list of comma-separated PKs.
initial = dict(request.GET.items())
for k in initial:
try:
f = opts.get_field(k)
except models.FieldDoesNotExist:
continue
if isinstance(f, models.ManyToManyField):
initial[k] = initial[k].split(",")
form = ModelForm(initial=initial)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2405 次 |
| 最近记录: |