【问题标题】:Django Model Class Missing in Admin管理员中缺少 Django 模型类
【发布时间】:2013-07-18 03:43:25
【问题描述】:

由于某种原因,archivealbum 类在 django 管理面板中显示了它们的所有字段,但是当我向图像添加图像时,image 没有显示album 字段控制板。如果我打开一个 shell,它显示 albumimage 的一个子集,它只是没有出现在 image 的管理界面中(但它通过 CLI 显示)。为什么?

class archive(models.Model):
    name = models.CharField(max_length = 30)
    archivedata = models.TextField(blank=True, help_text="Documentation for album/image.archivedata methodology is put here")
    def __unicode__(self):
        return self.name

class tag(models.Model):
    archive = models.ForeignKey(archive)
    tag = models.CharField(max_length=60)
    def __unicode__(self):
        return self.tag

class album(models.Model):
    archive = models.ForeignKey(archive)
    title = models.CharField(max_length=60)
    tags = models.ManyToManyField(tag, blank=True, help_text="Searchable Keywords")
    archivedata = models.TextField(blank=True, null=True, help_text="Data specific to particular archiving methods or processes can be stored here")
    def __unicode__(self):
        return self.title

class image(models.Model):
    album = models.ForeignKey(album)
    archive = models.ForeignKey(archive)
    imagefile = models.ImageField(upload_to='ns/') #image.width/height
    title = models.CharField(max_length=60, blank=True, help_text="Descriptive image title")
    tags = models.ManyToManyField(tag, blank=True, help_text="Searchable Keywords")

更新:每个请求包括我的 admin.py:

from django.db.models import get_models, get_app
from django.contrib import admin
from django.contrib.admin.sites import AlreadyRegistered

def autoregister(*app_list):
    for app_name in app_list:
        app_models = get_app(app_name)
        for model in get_models(app_models):
            try:
                admin.site.register(model)
            except AlreadyRegistered:
                pass

autoregister('appname')

【问题讨论】:

  • 你的 admin.py 是什么样的?
  • 我更新了我的问题,为你添加了 admin.py

标签: python django django-models django-admin


【解决方案1】:

您的admin.py 文件通常应如下所示。

from django.contrib import admin

admin.site.register(archive)
admin.site.register(album)
admin.site.register(image)

根据您的 admin.py 我会这样做。

autoregister('archive', 'album', 'image')

这就是一些提示 - 您的 admin.py 有点过于复杂,当 3 行就足够时不需要。此外,您应该以大写字母命名您的模型(存档、相册、图像)

【讨论】:

  • 在实际的 models.py 中有 14 个以上的表——为了简单起见,我把它删掉了。尽管如此,我尝试为每个模型直接做一个admin.site.register,并将它们全部转换为大写语法以保持pythonic,但这不起作用。
  • 我知道,如果我从 image 类中删除存档,django 会将其用作某种密钥识别器,并在我在管理 web ui 中创建新图像时抛出错误,如果这对某人有帮助。
  • 有效。我从 mysql 重新开始,并重命名为 MyImage,但我怀疑我需要擦除数据库才能使其正常工作。不过,感谢您的帮助-我在您的时间里给了您尽可能多的积分!
【解决方案2】:

我没有看到任何问题,您在管理员中有一些额外的代码吗?一些覆盖album field 的代码?

【讨论】:

  • 你是对的。我的数据库刚刚爆炸。可能需要一段时间才能恢复到这一点,谢谢大家的耐心。我会尽快报告。
  • 已修复。它是 MyImage 或重置整个数据库。我怀疑是后者。
猜你喜欢
  • 2011-06-23
  • 2021-12-11
  • 1970-01-01
  • 2019-06-21
  • 2013-01-14
  • 2011-11-06
  • 2011-01-26
  • 1970-01-01
  • 2014-05-21
相关资源
最近更新 更多