我更改了管理视图,如下所述: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中自定义添加链接。/workflow/templates/admin/workflow/action/change_list.html中的模板会覆盖管理change_list,但所有三个模型都使用相同的模板。因此,我认为当我更改行时,一定有更好的解决方案,如模板中的harcode param
<a href="add/{% if is_popup %}?_popup=1{% endif %}" class="addlink">至
<a href="add/?actionstatus=5" class="addlink">在新的操作表单中预先选择了操作类别。但是我如何才能覆盖每个模型中的addlink。
我必须在projectsview中通过参数获取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)发布于 2012-05-09 21:56:36
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。该代码检查querystring中是否有project,并将其值附加到生成的addlink。
您还可以编写JS代码,以便在changelist页面加载完成时更新add link。就像这样
(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以了解常规参数操作。
https://stackoverflow.com/questions/10516473
复制相似问题