Django-使用其他对象模型

时间:2019-02-18 11:15:10

标签: django django-models django-forms django-admin

在我的项目中,我将Django admin与Django 1.11一起使用,因此我有一个modelA和一个modelB,用户可以创建它们两者,但是有时我需要基于modelB对象创建一个带有一些value字段的modelA对象。

为此,我已经覆盖了/templates/my_app_name/my_modelB/change_form.html模板并添加了如下按钮:

{% extends "admin/change_form.html" %}
{% load i18n admin_urls %}
{% block object-tools-items %}

      <div class="form-row form-row-field-quick-view">
            <a href="create_object_A_view">Create ObjA from this ObjB</a>
      </div>

    {% endif %}
{% endblock %}

这样,当我打开一些ObjB更改表单时,会得到一个链接,该链接基于一个视图,该视图的任务是将用户重定向到url / admin / app_name / modelA / add /并显示正确的表单,其中包含基于表单来源的ObjB值。 所以我创建了一个这样的视图:

class create_object_A_view(View):
    model = ModelA

    url = '/admin/app_name/modelA/add/'

    def get(self, request, *args, **kwargs):

       #get data from objB, say it foo and bar....
       form = ModelAForm(initial={'field1': 'foo' , 'field2':'bar'})

        return redirect(self.url,
            {'form':form,
            'opts': self.model._meta,
            'change': False,
            'is_popup':False,
            'save_as':False,
            'has_delete_permission':False,
            'has_add_permission': False,
            'has_change_permission':  False})

这样做,我可以正确重定向到/ admin / app_name / modelA / add /,但是我要预编译的字段为空。

这是达到此结果的正确方法吗?

1 个答案:

答案 0 :(得分:0)

您可以通过重定向到模型来实现这一点-在网址本身中添加带有表单数据的网址

例如:

return redirect(self.url+"?"+form.data.urlencode())