Django ModelAdmin - fieldsets ... поле 'date' отсутствует в форме - PullRequest
26 голосов
/ 19 августа 2010

Я выяснил, в чем проблема, когда писал этот вопрос. Я в любом случае отправляю сообщение на случай, если это может кому-то помочь.

Ошибка: '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)

Ответы [ 3 ]

64 голосов
/ 29 августа 2010

Ошибка из-за даты, имеющей auto_now_add=True (или auto_now=True).
Поскольку значение является автоматическим, оно не редактируется, поэтому оно не отображается в форме.Чтобы решить эту проблему, добавьте это в FooAdmin:

readonly_fields = ("date",)
6 голосов
/ 19 августа 2010

Моя проблема была немного другой. Моя проблема заключалась в наследовании модели и модели пользователя 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')}),
    )

где "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 голосов
/ 30 октября 2013

Это также может помочь некоторым людям узнать, что ошибка также появляется, когда в ModelAdmin есть неправильные наборы полей, ... как при выполнении миграций и забывании удалять удаленные поля ....

...