Django ModelAdmin - поля... поле "дата" отсутствует в форме
Я понял, в чем проблема, когда писал этот вопрос. Я отправляю его в любом случае, если он может помочь кому-то другому.
Ошибка: '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)
Ответы
Ответ 1
Ошибка связана с датой, имеющей auto_now_add=True
(или auto_now=True
).
Поскольку значение является автоматическим, оно не редактируется, поэтому оно не в форме. Чтобы решить эту проблему, добавьте это в FooAdmin
:
readonly_fields = ("date",)
Ответ 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 устранило ошибку, но тогда эти поля были только для чтения, чего я не хотел. Я обнаружил, что проблема в том, что ModelForm, используемый в django.contrib.admin, устанавливал модель в пользовательскую модель 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 есть некорректные поля,... при выполнении миграции и забывании удалить удаленные поля....