Django ModelAdmin - 字段集...表单中缺少字段'date'

时间:2010-08-18 21:19:45

标签: django django-admin django-forms

我在写这个问题时想出了问题所在。无论如何我都会发布它,以防它可以帮助别人。

错误:'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)

3 个答案:

答案 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)

当模型管理中存在不正确的字段集时,它也可能有助于某些人知道错误,...就像进行迁移和忘记删除已删除的字段一样....