在Django admin中将所有数据从一个表单复制到另一个表单

时间:2015-05-08 02:47:01

标签: django forms django-admin

我无法将表单中的数据发送到我的应用程序中的新表单。 我想执行以下操作:在用户单击记录中的按钮后,该记录数据将被复制到另一个空表单。

无需永久或长时间存储这些值。仅在从一个表单到另一个表单的过渡中,填充字段为空白表单。

基本上是Ctrl + C - Ctrl + V形式,但在复制后没有保存记录...

我已经完成了使用网址参数之类的工作,但想要更清洁。 我需要复制包括内联的值。

我想过将数据存储在会话中,然后在目标表单中检索它们。但是,我不知道它是否是实施它的最佳方式。 如果是这样,我如何在Django中使用会话?

这是我目前在admin.py文件中的代码:

def response_change(self, request, obj):
    # name of the custom button
    if '_copy_and_paste' in request.POST:
        # getting the data and storing the session
        request.session['field_1'] = obj.field_1
        request.session['field_2'] = obj.field_2

        return super(MyClassAdmin, self).response_change(request, obj)

我正在使用Django管理员(版本1.8)。

1 个答案:

答案 0 :(得分:0)

无需在会话中存储此信息,您可以将请求对象传递回模板页面。

settings.py 文件中,确保 context_processors.request 位于context_processors中:

TEMPLATES = [
    {
        ...
        'OPTIONS': {
            'context_processors': [
                ...,
                'django.template.context_processors.request',  #<- make sure this line is here
                ...,
            ],
        },
    },
]

然后,在 views.py

from django.shortcuts import render

def response_change(request):
    if '_copy_and_paste' in request.POST:
        return render(request, 'your_template.html')

在模板中,访问存储在请求中的数据:

<input type="text" name="field1" value="{% if request.POST.field1 %}{{ request.POST.field1}}{% endif %}">