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 ModelAdmin 中创建和保存动态字段?
添加 list_filter 时,如何在 django modeladmin 更改列表中修复/设置列宽?
Django 难以使用 ModelAdmin.queryset 和 ModelAdmin.list_filter 来限制显示的过滤器 itrems