Django ModelAdmin - fieldsets… поле 'date' отсутствует в форме

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

Ошибка: '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)
26
задан Pascal Polleunus 29 August 2010 в 13:29
поделиться

2 ответа

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

readonly_fields = ("date",)
64
ответ дан 28 November 2019 в 06:24
поделиться

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

Вот что я получаю при использовании наследования модели ... это некрасиво, но со своей работой.

Похоже, мы получали ту же ошибку, но по разным причинам.

6
ответ дан 28 November 2019 в 06:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: