【问题标题】:Django ModelAdmin - fieldsets ... field 'date' missing from the formDjango ModelAdmin - 字段集...表单中缺少字段“日期”
【发布时间】:2011-03-31 19:34:43
【问题描述】:

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

错误:“FooAdmin.fieldsets[0][1]['fields']”指的是表单中缺少的字段“日期”。

使用以下代码:

# 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)

【问题讨论】:

  • 感谢您的发帖,尽管您解决了您的问题,但本周早些时候我也遇到了同样的问题。
  • 你能把答案从问题正文中删除,然后单独发布吗? Stack Overflow 的常客(像我一样)会更容易知道这个问题得到了回答,然后我们也可以投票给你的答案。感谢您为本网站做出贡献!

标签: django django-admin django-forms


【解决方案1】:

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

readonly_fields = ("date",)

【讨论】:

  • readonly_fields 是在 django 1.2 中引入的 - 所以它在早期版本中不起作用。觉得值得一提。
  • 尽管 Django 出现令人讨厌的不直观错误消息,但在找到一个简单的解决方案方面做得很好。
【解决方案2】:

我的问题实际上有点不同。我的问题涉及模型继承和 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')}),
    )

其中“代理”和“公司”是我的用户模型的字段,它扩展了 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

这就是我使用模型继承得到的结果......它并不漂亮,但它完成了工作。

所以听起来我们遇到了同样的错误,但原因不同。

【讨论】:

    【解决方案3】:

    这也可能有助于某些人知道当 ModelAdmin 中存在不正确的字段集时也会出现错误,......就像在进行迁移时忘记删除已删除的字段......

    【讨论】:

      猜你喜欢
      • 2014-02-02
      • 2021-01-30
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      • 1970-01-01
      • 1970-01-01
      • 2015-01-15
      相关资源
      最近更新 更多