Django ModelAdmin - 字段集...表单中缺少字段“日期”

Posted

技术标签:

【中文标题】Django ModelAdmin - 字段集...表单中缺少字段“日期”【英文标题】:Django ModelAdmin - fieldsets ... field 'date' missing from the form 【发布时间】:2011-03-31 19:34:43 【问题描述】:

我在写这个问题时发现了问题所在。无论如何我都会发布它以防它可以帮助其他人。

错误:“FooAdmin.fieldsets[0][1]['fields']”指的是表单中缺少的字段“日期”。

使用以下代码:

# models.py
from django.db import models

class Foo(Base):
    date = models.DateField(auto_now_add=True)
    title = models.CharField(max_length=255)

# admin.py
from django.contrib import admin

class FooAdmin(BaseAdmin):
    list_display = ("title", "date")
    fieldsets = (
        (None, 
            "fields": ("date", "title")
        ),
    )

admin.site.register(Foo, FooAdmin)

【问题讨论】:

感谢您的发帖,尽管您解决了您的问题,但本周早些时候我也遇到了同样的问题。 你能把答案从问题正文中删除,然后单独发布吗? Stack Overflow 的常客(像我一样)会更容易知道这个问题得到了回答,然后我们也可以投票给你的答案。感谢您为本网站做出贡献! 【参考方案1】:

错误是由于日期有auto_now_add=True(或auto_now=True)。 由于该值是自动的,因此不可编辑,因此不在表单中。要解决这个问题,请将其添加到 FooAdmin:

readonly_fields = ("date",)

【讨论】:

readonly_fields 是在 django 1.2 中引入的 - 所以它在早期版本中不起作用。觉得值得一提。 尽管 Django 出现令人讨厌的不直观错误消息,但在找到一个简单的解决方案方面做得很好。【参考方案2】:

我的问题实际上有点不同。我的问题涉及模型继承和 django.contrib.admin 用户模型。

这导致了问题:

from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.admin import UserAdmin
class AdminUser (UserAdmin):
    fieldsets = UserAdmin.fieldsets + (
        (_('APPS Info'), 'fields': ('agency', 'company')),
    )

其中“代理”和“公司”是我的用户模型的字段,它扩展了 django 的用户模型。您将这些字段放入 readonly_fields 的解决方案确实修复了错误,但是这些字段是只读的,这不是我想要的。我发现问题在于 django.contrib.admin 中使用的 ModelForm 将模型设置为 Django 的用户模型。所以为了修复它,我添加了这个:

from django.contrib.auth.admin import UserAdmin, UserChangeForm as DjangoUserChangeForm
from django.utils.translation import ugettext_lazy as _
from apps_models.users.models import User
class UserChangeForm(DjangoUserChangeForm):
    class Meta:
        model = User
class AdminUser (UserAdmin):
    fieldsets = UserAdmin.fieldsets + (
        (_('APPS Info'), 'fields': ('agency', 'company')),
    )
    form = UserChangeForm

这就是我使用模型继承得到的结果......它并不漂亮,但它完成了工作。

所以听起来我们遇到了同样的错误,但原因不同。

【讨论】:

【参考方案3】:

这也可能有助于某些人知道当 ModelAdmin 中存在不正确的字段集时也会出现错误,......就像在进行迁移时忘记删除已删除的字段......

【讨论】:

以上是关于Django ModelAdmin - 字段集...表单中缺少字段“日期”的主要内容,如果未能解决你的问题,请参考以下文章

如何在字段集中显示Django管理员内联模型?

Django ModelAdmin 查询集覆盖不起作用

如何在 Django ModelAdmin 中创建和保存动态字段?

Django网站管理--ModelAdmin

添加 list_filter 时,如何在 django modeladmin 更改列表中修复/设置列宽?

Django 难以使用 ModelAdmin.queryset 和 ModelAdmin.list_filter 来限制显示的过滤器 itrems