0

我不知道为什么在尝试访问模型的管理change_list页面时出现此错误mymodel

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.2+,Django 1.5.1)上部署时,我的本地运行服务器(Python 2.7.5,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)

在我的本地机器上它仍然可以完美运行。

4

2 回答 2

0

在渲染模板期间有一些变量没有被传递.. 带头检查要传递的所需局部变量以实现 url 标记中的 url 模式..

于 2013-06-14T21:14:24.587 回答
0

当我的外键为空时,我遇到了同样的问题,而我在我的管理员 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)) 

脚本用法: 其中运营商、站点名称是外键字段。

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']
于 2014-01-19T03:46:46.433 回答