提问人:Pascal Polleunus 提问时间:8/19/2010 最后编辑:Pascal Polleunus 更新时间:11/15/2021 访问量:13154
Django ModelAdmin - 字段集 ...表单中缺少字段“日期”
Django ModelAdmin - fieldsets ... field 'date' missing from the form
问:
我在写这个问题时弄清楚了问题所在。无论如何,我都会发布它,以防它可以帮助其他人。
错误:“FooAdmin.fieldsets[0][1]['fields']”是指表单中缺少的字段“date”。
使用以下代码:
# 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)
答:
7赞
Matthew J Morrison
8/20/2010
#1
我的问题实际上有点不同。我的问题涉及模型继承和 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')}),
)
其中 “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
这就是我使用模型继承所得到的......它并不漂亮,但它完成了工作。
所以听起来我们遇到了同样的错误,但原因不同。
64赞
Pascal Polleunus
8/29/2010
#2
错误是由于日期具有 (或 )。
由于该值是自动的,因此不可编辑,因此它不在表单中。要解决此问题,请将其添加到:auto_now_add=True
auto_now=True
FooAdmin
readonly_fields = ("date",)
评论
0赞
rombarcz
2/18/2011
readonly_fields是在 django 1.2 中引入的 - 所以它在早期版本中不起作用。认为值得一提。
2赞
Cerin
4/15/2011
尽管 Django 的 bug 消息令人讨厌,但找到一个简单的解决方案方面做得很好。
3赞
Omaraf
10/31/2013
#3
它还可以帮助一些人知道,当 ModelAdmin 中存在不正确的字段集时,也会出现错误,...就像在进行迁移并忘记删除已删除的字段时一样......
评论