Djanjo admin:单击ForeignKey下拉列表旁边的add-another按钮时的预填充数据

DrR*_*nja 3 django django-admin

在Django Admin中,当你修改一个对象属性时,如果有一个ForeignKey,它将有一个包含所有选项的下拉框,另外还有一个"+"按钮来添加更多选项.当我点击它时,我想预先填写一些数据.

我注意到如果我可以修改URL(例如:http://localhost:8000/admin/app/model/add/?field=valuewhere fieldvalue以编程方式修改),我可以这样做.

我想我要重写的东西forms.ModelFormadmin.ModelAdmin用途,但我不知道是什么.

小智 7

Django允许您替换请求的GET字典(它用于预填充管理表单).

如果要在url中发送模型表单的字段值,Django将自动从url get参数中获取值.例如,考虑到 "http://myhost/admin/app/model/add/?name=testname"它,它将在admin add view模板中使用值'testname'预填充表单的'name'字段.

但是如果你在你的url中发送任何id,那么你需要通过覆盖add_view函数来修改get参数.

取自stackoverflow的答案

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

    def add_view(self, request, form_url='', extra_context=None):
        source_id = request.GET.get('source',None)
        if source_id != 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)

它只是一个例子.它与你的模型和领域:)