Django admin:如何从GET变量中填充新对象?

avr*_*mov 1 django django-admin

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

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

avr*_*mov 5

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

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)
Run Code Online (Sandbox Code Playgroud)

这样,我sourceURL参数获取对象,对它们执行所需操作,然后预填充表单。