Django: xyz.fieldsets [0] [1] ['fields'] ссылается на поле '123', которое отсутствует в форме - PullRequest
0 голосов
/ 18 июня 2011

У меня мало сомнений, что это будет действительно глупый вопрос. Но я действительно не могу понять это, поэтому я все равно спрошу.

В /svsite/src/svsite/member/models/svuser.py (немного необычное расположение, см. Этот вопрос Поместите формы администратора Django в разные файлы ).

from django.contrib import admin
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin, UserChangeForm as DjangoUserChangeForm
from svsite.member.models.svuser import svUser

class UserChangeForm(DjangoUserChangeForm):
    class Meta:
        pass

class svUserAdmin(UserAdmin):
    form = UserChangeForm
    readonly_fields = ('date_joined', 'last_login', 'last_update', )

    fieldsets = \
    (
        (
            'Login',
            {
                'classes': ('collapse', ),
                'fields':
                (
                    'username',
                    'password',
                    'is_active',
                    'email_verified',
                    'awaiting_user_confirmation',
                ), 
            }
        ),
        (
            'Personal info',
            {
                'fields':
                (
                    'first_name',
                    'middle_name',
                    'last_name', 
                ), 
            }
        ),
    )
[...]

В модели, которую я имею по адресу /svsite/src/svsite/member/admin/svuser.py:

from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User, UserManager

class svUser(User):
    email_verified = models.BooleanField(default = False)
    awaiting_user_confirmation = models.BooleanField(
        _('approved by board'), default = False, help_text=_('This user\'s identity was confirmed by the board or another authority.'))
[...]

Я получаю ошибку:

'svUserAdmin.fieldsets[0][1]['fields']' refers to field 'password' that is missing from the form.

Если я комментирую пароль, ошибка переходит к следующему полю. Независимо, если это поле модели пользователя по умолчанию или поле, которое я добавил в svUser, унаследованном от пользователя. Очень удивительно (для меня), имя пользователя, кажется, единственное поле, которое работает, без проблем в этом.

Я нашел этот вопрос Django ModelAdmin - fieldsets ... поле 'date' отсутствует в форме , и хотя поля не являются auto_now, я добавил их в readonly_fields, и ошибка исчезла. Однако очевидно, что сделать все поля доступными только для чтения - не вариант.

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

1 Ответ

2 голосов
/ 18 июня 2011

Проблема заключается в том, что вы используете ModelForm для модели, которую вы не редактируете.

Я попробовал подобную ситуацию и получил похожую ошибку.

class UserChangeForm(DjangoUserChangeForm):
    class Meta:
        model = svUser # update the model - default form points to User
...