我在写这个问题时想出了问题所在。无论如何我都会发布它,以防它可以帮助别人。
错误:'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)
答案 0 :(得分:64)
错误是由于日期为auto_now_add=True
(或auto_now=True
)
由于该值是自动的,因此不可编辑,因此不在表单中。要解决此问题,请在FooAdmin
:
readonly_fields = ("date",)
答案 1 :(得分:6)
我的问题实际上有点不同。我的问题涉及模型继承和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
这就是我使用模型继承所得到的......它不是很漂亮,但它完成了工作。
所以听起来我们得到了同样的错误,但出于不同的原因。
答案 2 :(得分:3)
当模型管理中存在不正确的字段集时,它也可能有助于某些人知道错误,...就像进行迁移和忘记删除已删除的字段一样....