我的 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 在保存前修改内联项属性