在我的项目中,我将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 /,但是我要预编译的字段为空。
这是达到此结果的正确方法吗?
答案 0 :(得分:0)
您可以通过重定向到模型来实现这一点-在网址本身中添加带有表单数据的网址
例如:
return redirect(self.url+"?"+form.data.urlencode())