【问题标题】:My admin.TabularInline class returns exception: object has no attribute 'urls'我的 admin.TabularInline 类返回异常:对象没有属性 'urls'
【发布时间】:2014-03-12 21:44:51
【问题描述】:

所以我一直在谷歌搜索,但找不到解决问题的方法。老实说,我很困惑,所以谢谢你看看。

mysite/mysite/urls.py:

...
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
                         url(r'^admin/', include(admin.site.urls)),
...

mysite/upgradelists/admin.py:

from django.contrib import admin
from upgrademe.models import GPU, CPU

class CPUAdmin(admin.TabularInline):
    model = CPU

admin.site.register(CPU, CPUAdmin)

返回错误:

AttributeError at /admin/
'CPUAdmin' object has no attribute 'urls'

但是,如果我将 admin.py 更改为:

class CPUAdmin(admin.ModelAdmin):
    model = CPU

那么一切都很好。 (尽管无关紧要:我相信'model = CPU'部分是多余的?)

对此的任何帮助/见解将不胜感激。谷歌让我很困惑,在 StackOverflow 上的搜索也没有发现任何相关的内容。

【问题讨论】:

    标签: python django django-admin django-urls


    【解决方案1】:

    我遇到了同样的问题,谷歌把我带到了这个帖子,但没有帮助。我在即将发布我的问题时解决了它。

    我什至不知道这是否与您遇到的问题相同,但这里是:

    class UserAnswerInline(admin.TabularInline):
        model = UserAnswer
    class UserQuestionAdmin(admin.ModelAdmin):
        inlines = [UserAnswerInline]
    admin.site.register(UserQuestion, UserAnswerInline)
    

    正确的代码:

    class UserAnswerInline(admin.TabularInline):
        model = UserAnswer
    class UserQuestionAdmin(admin.ModelAdmin):
        inlines = [UserAnswerInline]
    admin.site.register(UserQuestion, UserQuestionAdmin)
    

    发现不同了吗?是的,错误的班级名称。我花了 5 个小时才决定在这里创建一个新问题,然后在解释问题时弄清楚了。

    【讨论】:

      【解决方案2】:

      我也有同样的问题。

      你可以试试这个来解决这个问题:

      class CPUInline(admin.TabularInline):
          model = CPU
      
      class CPUAdmin(admin.ModelAdmin):
          inlines = [CPUInline]
      
      admin.site.register(CPU, CPUAdmin)
      

      【讨论】:

        【解决方案3】:

        您不能直接向管理站点注册表格管理类。 TabularAdmin 是 InlineAdmin 的子类,因此只能在完整 ModelAdmin 的 inlines 属性中使用。

        【讨论】:

        • 员工用户无法看到这个内联,然后当我去添加权限时,我没有找到该模型添加的权限。那么现在的黑客是什么?
        【解决方案4】:

        其他答案都以自己的方式正确。本质上,违规行是admin.site.register(CPU, CPUAdmin)

        因为此模型包含在另一个模型中(我假设它是 GPU,因为它是您要导入的唯一其他模型),所以您不应该注册它,而只注册它将被内联的模型 -编。因此,从 admin.py 中删除注册行将修复 object has no attribute 'urls'

        【讨论】:

          【解决方案5】:

          内联只能在 modelAdmin 中使用,这就是您收到该错误的原因。根据我对您的代码的理解,您需要将代码编写为。

          class CPUInline(admin.TabularInline):
              model = CPU
          @admin.register(CPU)
          class CPUAdmin(admin.ModelAdmin):
              inlines = [CPUInline]
          

          【讨论】:

            【解决方案6】:

            这个错误恰好来自您最不期望的部分。

            您不能在管理站点中注册 InlineModelAdmin 或其子类。您只能在 ModelAdmin 类的属性中使用它们。

            这是导致此类错误的最常见原因,而且很难发现

            【讨论】:

            • 请在回答时添加代码sn-p。如果你想提供建议,你应该把它写成评论。
            猜你喜欢
            • 2018-12-21
            • 2010-10-05
            • 1970-01-01
            • 2016-07-14
            • 2017-01-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-01-22
            相关资源
            最近更新 更多