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