我不知道为什么我得到这个错误,而试图达到mymodel
模型的管理change_list
页:
NoReverseMatch at /admin/myapp/mymodel/
Reverse for 'myapp_mymodel_change' with arguments '(u'',)' and keyword arguments '{}' not found.
Error during template rendering
In template /usr/local/lib/python2.7/dist-packages/django/contrib/admin/templates/admin/change_list.html, error at line 91
84 <form id="changelist-form" action="" method="post"{% if cl.formset.is_multipart %} enctype="multipart/form-data"{% endif %}>{% csrf_token %}
85 {% if cl.formset %}
86 <div>{{ cl.formset.management_form }}</div>
87 {% endif %}
88
89 {% block result_list %}
90 {% if action_form and actions_on_top and cl.full_result_count %}{% admin_actions %}{% endif %}
91 {% result_list cl %}
92 {% if action_form and actions_on_bottom and cl.full_result_count %}{% admin_actions %}{% endif %}
93 {% endblock %}
94 {% block pagination %}{% pagination cl %}{% endblock %}
95 </form>
该错误不会发生在我的本地运行服务器(Python 2.7.5, Django 1.5.1),只有当部署在我的远程服务器(Python 2.7.2+, Django 1.5.1)。有趣的是,只有一个特定的模型受到影响——我可以访问所有其他模型的change_list
页面,没有任何问题。管理区域的其他部分也可以正常工作。
关于NoReverseMatch
错误的类似问题的答案没有多大帮助,因为它发生在管理中,而不是我自己的代码。有人知道从哪里开始找吗?
我有一些自定义的list_display
字段,我现在注释掉用于测试。他们似乎要为NoReverseMatch
的错误负责。现在我得到了另一个错误:
AttributeError at /admin/myapp/mymodel/
'NoneType' object has no attribute '_meta'
然后我去掉了所有不需要的东西。现在这是我完整的admin.py
:
from django.contrib import admin
from myproject.myapp.models import *
class MymodelAdmin(admin.ModelAdmin):
list_display = ['email', 'user', 'is_active', 'first_used']
date_hierarchy = 'first_used'
ordering = ['-first_used']
list_filter = ['is_active', 'first_used', 'user']
admin.site.register(Mymodel, MymodelAdmin)
在我的本地机器上它仍然可以正常运行
有一些变量在渲染模板时没有被传递。通过检查所需的局部变量来实现url标记中的url模式。
我遇到了同样的问题,当我的外键是空的,而使用这个脚本不是原来我的admin change_list.html。
它的作用是显示模型的foreign_key列。
from django.forms import MediaDefiningClass
class ModelAdminWithForeignKeyLinksMetaclass(MediaDefiningClass):
def __getattr__(cls, name):
def foreign_key_link(instance, field):
# Please note in Django 1.6
# Model._meta.module_name was renamed to model_name
target = getattr(instance, field)
return u'<a href="../../%s/%s/%d">%s</a>' % (
target._meta.app_label, target._meta.model_name, target.id, unicode(target))
if name[:8] == 'link_to_':
method = partial(foreign_key_link, field=name[8:])
method.__name__ = name[8:]
method.allow_tags = True
setattr(cls, name, method)
return getattr(cls, name)
raise AttributeError
我添加了一行 if target:
来过滤掉那些空值。
if target:
return u'<a href="../../%s/%s/%d">%s</a>' % (
target._meta.app_label, target._meta.model_name, target.id, unicode(target))
脚本用法:其中carrier,sitename为外键字段。
class LatestRsl_v2Admin(admin.ModelAdmin):
__metaclass__ = classmaker(right_metas=(ModelAdminWithForeignKeyLinksMetaclass,))
list_display = ['issued', 'link_to_carrier', ]
search_fields = ['=rslno','=issued','link_to_carrier', 'link_to_sitename']