javascript - Django 管理员 : Pre-populating values from POST or GET?

标签 javascript django django-admin django-templates

在我的 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 %}

然后,当用户点击链接时,name 字段会预先填充值 {{person}}

Django Admin 界面是否支持这样做? Django 管理表单使用 POST,但我不确定如何将 POST 数据添加到来自模板的请求。

或者,我可以设置 GET 变量,然后在表单中使用自定义 JavaScript 来相应地设置值。

最佳答案

根据源代码(和快速测试),Django 确实支持在管理中使用 GET 参数作为模型表单的初始值。它甚至支持多对多关系。

你试过吗?可能是网址末尾缺少的斜杠。

admin/foo/bar/add?name=Foobar

可能被重定向到...

admin/foo/bar/add/

... 从而删除查询字符串。所以尝试在那里添加一个斜杠,看看它是否有效。

admin/foo/bar/add/?name={{ person }}

更新(预填充 bool 字段)

以防其他人在预填充 bool 字段时遇到问题:

如果您在查询字符串中传递任何值,例如admin/foo/bar/add/?is_active=foo,这将用 True 预填充 is_active 字段(因为任何非空字符串都是真值)。因此,如果您想“取消选中”给定字段的复选框,则根本不传递任何值,例如 admin/foo/bar/add/?is_active=


这是 ModelAdmin 上的 add_view 方法的代码片段,负责使用 GET 参数作为初始值。 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)

关于javascript - Django 管理员 : Pre-populating values from POST or GET?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4924831/

相关文章:

django - "startproject"选项从 django-admin.py 中消失

javascript - 全类事件发生故障

javascript - 在 Pangram 中设置字母类

javascript - 如何使用JS(DOM)聚焦/单击YouTube的注释框

python - Django 项目的生产设置

python - 如何用 Django 编写这个查询集?

python - Django 找不到项目应用程序 - 无法导入 x_app

python - Django-使用内联函数时进程中止

django - 在管理中使用 readonly_fields 在 TextField 中保留格式文本

php - 如何获取使用 post 方法循环插入值到数据库中的文本框的值?