我的 admin.TabularInline 类返回异常:对象没有属性 'urls'

Posted

技术标签:

【中文标题】我的 admin.TabularInline 类返回异常:对象没有属性 \'urls\'【英文标题】: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'部分是多余的?)

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

【问题讨论】:

【参考方案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。如果你想提供建议,你应该把它写成评论。

以上是关于我的 admin.TabularInline 类返回异常:对象没有属性 'urls'的主要内容,如果未能解决你的问题,请参考以下文章

在 admin.TabularInline 中删除或编辑对象名称

与 admin.TabularInline 有外部关系的管理面板的 Django Inline

我如何在管理员之外复制 admin.TabularInline(在用户端?)

Django-Admin TabularInline 在保存前修改内联项属性

django admin TabularInline raw_id_fields 添加查询 搜索小图标显示

一起使用Django SimpleHistory和TabularInline