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

Pas*_*nus 26 django django-forms django-admin

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

错误:'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)
Run Code Online (Sandbox Code Playgroud)

Pas*_*nus 64

错误是由于日期有auto_now_add=True(或auto_now=True).
由于该值是自动的,因此不可编辑,因此不在表单中.要解决这个问题,请将其添加到FooAdmin:

readonly_fields = ("date",)
Run Code Online (Sandbox Code Playgroud)

  • 尽管Django的令人讨厌的不直观的错误信息,但找到一个简单的解决方案仍然很棒. (2认同)

Mat*_*son 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')}),
    )
Run Code Online (Sandbox Code Playgroud)

其中"代理"和"公司"是我的用户模型的字段,扩展了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
Run Code Online (Sandbox Code Playgroud)

这就是我使用模型继承所获得的......它不是很漂亮,但它完成了工作.

所以听起来我们得到了同样的错误,但出于不同的原因.