Django:xyz.fieldsets [0] [1] ['fields']指的是表单中缺少的字段'123'

时间:2011-06-17 20:35:48

标签: django admin readonly

我毫不怀疑这将是一个非常愚蠢的问题。但我真的无法理解,所以无论如何我都会问它。

在/svsite/src/svsite/member/models/svuser.py(一个不寻常的位置,请参阅此问题Place Django admin forms in different files)。

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 ... field 'date' missing from the form,即使字段不是auto_now,我也将它们添加到readonly_fields,这使得错误消失了。显然,将所有字段设为只读是不可取的。

这可能是一些与代码无关的愚蠢但我真的找不到它,在我看来它确实应该有效。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

问题似乎是因为您正在使用ModelForm表示您未编辑的模型。

我尝试了一个类似的情况并得到了类似的错误模式。

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