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

Django ModelAdmin - fieldsets ... field 'date' missing from the form

提问人:Pascal Polleunus 提问时间:8/19/2010 最后编辑:Pascal Polleunus 更新时间:11/15/2021 访问量:13154

问:

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

错误:“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)
django django-forms

评论

2赞 Matthew J Morrison 8/19/2010
感谢您的发帖,即使您解决了您的问题,我本周早些时候也遇到了同样的问题。
0赞 Dominic Rodger 8/19/2010
你能从问题正文中删除答案,并单独发布吗?Stack Overflow 的常客(像我一样)会发现更容易知道这个问题的答案,然后我们可以为您的答案投票。感谢您对网站的贡献!

答:

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=Trueauto_now=TrueFooAdmin

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 中存在不正确的字段集时,也会出现错误,...就像在进行迁移并忘记删除已删除的字段时一样......