django.core.exceptions.FieldError:为User指定的未知字段(academic_grade)

时间:2017-06-13 19:10:48

标签: python django

我正在form.py中创建一个表单,我有:

config.trace_filter = GlobbingFilter(include=['__main__', 'doms.*'])

但是我收到以下错误:

class UserForm(forms.ModelForm):
    password = forms.CharField(widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = ['first_name', 'last_name',
                  'username', 'email', 'academic_grade',]

我在数据库和用户表中检查了' academic_grade'等级栏

models.py

django.core.exceptions.FieldError: Unknown field(s) (academic_grade) specified for User

请指导我完成这个

2 个答案:

答案 0 :(得分:5)

当你跑 -

  python manage.py migrate

django将迁移以下应用中的所有内置模型 -

'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes'

django.contrib.auth 应用中,有一个内置表用户,其中包含以下字段 -

 Column    |

 id
 password
 last_login
 is_superuser
 username
 first_name
 last_name
 email
 is_staff
 is_active
 date_joined

我担心,这是由django选择的(通过错误导入或在实际创建自己的用户之前运行迁移命令)。 后者实际上会在模型之前创建用户。

因此,我建议您交叉检查您的导入或尝试为您的用户提供其他名称。例如

   class PersonForm(forms.ModelForm):
      password = forms.CharField(widget=forms.PasswordInput)

      class Meta:
         model = Person
         fields = ['first_name', 'last_name',
              'username', 'email', 'academic_grade',]

请告诉我,如果你认为这有帮助或纠正我的话!

由于

答案 1 :(得分:0)

另一种可能的情况是您可能忘记在设置中添加AUTH_USER_MODEL。 (这在我身上很多次发生。)

如果您构建customUser类,我建议您不要使用User作为类名。

class CustomUser(AbstractBaseUser, PermissionsMixin):
    username = models.CharField(max_length=30, blank=True, default='')
    academic_grade = models.CharField(choices=GRADE_CHOICES, default='')
from django.contrib.auth import get_user_model

User = get_user_model()

class UserForm(forms.ModelForm):
    password = forms.CharField(widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = ['first_name', 'last_name',
                  'username', 'email', 'academic_grade',]

,然后在setting.py中添加

AUTH_USER_MODEL = 'appName.CustomUser'

如果您忘记添加AUTH_USER_MODEL,则在迁移时会创建默认的django auth字段。您可以在迁移文件中进行验证。因此,您尝试在form.py中调用的任何自定义字段都将不可用。