2

在 Django 的管理员中,我看到了如何使用 GET 变量设置“添加对象”表单的字段(例如/admin/app/model/add?title=lol,将“标题”字段设置为“大声笑”)。

但是,我希望能够做一些事情,/admin/app/model/add?key=18并从另一个模型的实例中为我的字段加载默认数据。理想情况下,我还希望能够对填充表单的值进行一些处理。我该怎么做呢?

4

2 回答 2

5

我设法弄清楚了。值得庆幸的是,Django 允许您替换 arequestGETdict(它用于预填充管理表单)。以下对我有用:

class ArticleAdmin(admin.ModelAdmin):
    # ...

    def add_view(self, request, form_url='', extra_context=None):
        source_id = request.GET.get('source', None)
        if source_id is not None:
            source = FeedPost.objects.get(id=source_id)
            # any extra processing can go here...
            g = request.GET.copy()
            g.update({
                'title': source.title,
                'contents': source.description + u"... \n\n[" + source.url + "]",
            })
            request.GET = g

        return super(ArticleAdmin, self).add_view(request, form_url, extra_context)

这样,我从URL 参数source中获取对象,对它们做我想做的事,然后预填充表单。

于 2012-04-23T16:44:58.667 回答
2

您可以覆盖实例的方法add_viewModelAdmin添加在此处获取对象,将对象设置pkNone并将该对象作为instance表单提供。带有的对象pk == None将始终作为新对象插入到表单的数据库中save()

于 2012-04-19T05:05:03.733 回答