Подтвердить что ты не робот

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)
4b9b3361

Ответ 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 есть некорректные поля,... при выполнении миграции и забывании удалить удаленные поля....