【问题标题】:Read only DateTimeField won't render in django admin只读 DateTimeField 不会在 django admin 中呈现
【发布时间】:2012-12-06 04:56:38
【问题描述】:

我有以下 django 模型:

class Article(models.Model):
    title = models.CharField(max_length = 200)
    body = models.TextField()
    created_date = models.DateTimeField(auto_now_add=True)

我还有以下 django 管理类:

class ArticleAdmin(admin.ModelAdmin):
    fields = ['title', 'body']
    readonly_fields = ['created_date']
    list_display = ['title', 'body', 'created_date']

在 django 管理应用程序中,我可以在我的文章列表中看到 created_date 字段:

但对于我来说,当我打开一篇文章时,我无法让 created_date 字段呈现(作为只读字段):

我从docs 和谷歌搜索中得到印象,即使我在DateTimeField 上将auto_now_add 设置为True,将文章的created_date 字段添加到readonly_fields 也会允许这种情况发生。

我在这里叫错树了吗?

我正在使用 django 1.4.2。

【问题讨论】:

  • 如果它是只读的(因此无法更改),为什么需要在“更改文章”页面上?
  • @DavidRobinson - 这样我就可以显示文章最初创建的时间。
  • @DavidRobinson,change 页面也用作对象详细信息视图页面。创建/读取/更新都是一个模板/表单。

标签: python django django-admin


【解决方案1】:

如果您指定了fields,则需要将该字段添加到fields

但是,当您指定 ModelAdmin.fields 或 ModelAdmin.fieldsets 时,只读字段必须存在才能显示(否则它们将被忽略)。

auto_now 的魔力已经让我好几次了。

【讨论】:

  • 啊!...当我第一次尝试这个时,我不知道 readonly_fields 并最初将 created_date 添加到 fields。当然,它引发了异常,我将其删除。然后我发现了readonly_fields,但没想到将字段重新添加到fields 列表中,错误地假设我仍然会遇到异常。非常感谢。
  • 没问题.. 这绝对是我觉得特别神奇的一段 django。我想有一次我只是简单地删除了它并做了通常的 save() 覆盖而不是读入它。
猜你喜欢
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
  • 2011-03-08
  • 2019-05-02
  • 2012-12-27
  • 1970-01-01
  • 1970-01-01
  • 2016-06-26
相关资源
最近更新 更多