首先,我想告诉你,我确实检查了其他相关的问题,但他们的解决方案非常简单(注册不当,设置等)。这个问题在我使用Django开发的3+年中从未遇到过,这是一个奇怪的问题。所以来了:
我有一个90%芹菜任务的应用程序,所以它只有两款。它们很简单。我在应用程序的ModelAdmin中定义了两个admin.py类,每个模型一个。这些也很简单。他们都是正确注册的。应用程序在INSTALLED_APPS中。
所有犹太的,没有任何定制的模板,标签或表单,只是一个普通的admin.py:
from myapp.models import (Something, OtherModel)
class SomethingAdmin(admin.ModelAdmin):
# admin config ...
class OtherModelAdmin(admin.ModelAdmin):
pass # Trying anything at this point...
admin.site.register(Something, SomethingAdmin)
admin.site.register(OtherModel, OtherModelAdmin)很简单,它不能失败,但是它失败了:其中一个没有出现在管理员中。它根本没有注册(404在手动网址访问)。另一个确实出现了,而且工作正常。对不可见管理进行验证是因为当我向它的list_display添加一个奇怪的值时,Django确实会引发适当的异常(ImproperlyConfigured)。所以它确实读过了,只是没有注册。如果我注释掉可见的一个,应用程序就会被从管理中删除(当然,它认为没有模型管理员)。
因此,简而言之,一个ModelAdmins是不可见的,而另一个在同一个文件中并且配置几乎相同,不是这样。有什么想法吗?
编辑:我期待的一些建议的答案:是的,模型工作正常(并且经过了大量的单元测试),我已经创建/保存了实例,并且它们都在数据库中。是的,我确实重新启动了服务器。是的,这台电脑是插上的,而且它现在开着。:)
发布于 2014-02-24 14:26:59
事实证明,问题在于结构:模型是一个包,而不是更常见的模块。看起来即使在包级(在init.py中导入它)上也是可用的,Django仍然不知道它应该包含在哪个应用程序中。
您需要做的是在其Meta类中指定app_label。因此,现在的模式是:
from django.db import models
class OtherModel(models.Model):
class Meta:
app_label = 'someapp'
# other meta attrs
# Model attrs ...奇怪的是,当模型在通常的models.SomeModel命名空间中可用时,需要指定它,但至少解决方案足够简单。
顺便说一句,你可以猜到另一款车型确实包括了这个Meta,我只是之前没有注意到。LOL。
https://stackoverflow.com/questions/21955353
复制相似问题