我改变了管理视图,如下所述: How Do I Show Django Admin Change List View of foreign key children?
我有客户 - >项目 - >行动 我通过这种方法得到了项目的所有动作:
def related_actions(self, obj):
from django.core import urlresolvers
url = urlresolvers.reverse("admin:workflow_action_changelist")
lookup = u"project__exact"
text = obj.name
return u"<a href='%s?%s=%d'>%s</a>" % (url, lookup, obj.pk, text)
现在我想在change_list中自定义addlink。管理员change_list被/workflow/templates/admin/workflow/action/change_list.html中的模板覆盖 但是这三个模型都使用相同的模板。 所以我认为必须有更好的解决方案作为模板中的harcode param 当我改变线
<a href="add/{% if is_popup %}?_popup=1{% endif %}" class="addlink">
到
<a href="add/?actionstatus=5" class="addlink">
在新的操作表单中预先选择了actioncategory。但是我怎么能覆盖每个模型中的addlink。
我必须通过项目视图中的参数获取actionstatus:
/workflow/action/?project__exact=5
有什么建议吗?
在动作模型中是否有类似伪的东西?
def add(self)
get param projectid from url
return "<a href='/workflow/action/add/%s' target='_blank'>Add Action</a>" % (parent.project id)
答案 0 :(得分:2)
AFAIK,没有这样add
您可以通过扩展来自定义 change_list.html ,尤其是 object-list-item 块:
{% block object-tools-items %}
<li>
<a href="{% url cl.opts|admin_urlname:'add' %}{% if is_popup %}?_popup=1{% else %}?{% endif %}{% if "project" in cl.params %}&project={{ cl.params.project }}{% endif %}" class="addlink">
{% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}
</a>
</li>
{% endblock %}
此处,cl
是ChangeList
个实例。已过滤cl.params
request.GET
。代码检查查询字符串中是否有project
,并将其值附加到生成的addlink。
当更改列表页面完成加载时,您还可以编写JS代码来更新添加链接。
之类的东西(function($){
$(function(){
var m = window.location.search.match(/[?&]project=([^&]*)/);
if (m){
var link = $('a.addlink').attr('href');
$('a.addlink').attr('href', link+(link.match(/\?_popup=1$/)?'&':'?')+'project='+m[1]);
}
});
})(django.jQuery);
检查this是否有一般参数操作。