Django 表单给出的“str”对象没有属性“_meta”

问题描述 投票:0回答:1

我正在制作一个如下所示的自定义用户模型

账户/模型.py

class MyUser(AbstractUser):
    role_tuple = (
        ('admin', 'admin'),
        ('user', 'user'),
        ('activist', 'activist'),
    )
    role = models.CharField(null = True, default='user', max_length = 200, choices = role_tuple)
    user_proof_image = models.ImageField(null=True, upload_to='user_proof_images')

将其添加到settings.py

AUTH_USER_MODEL = 'accounts.MyUser'

我现在想使用自定义用户模型创建一个表单,所以我使用了

from django.contrib.auth.forms import UserCreationForm
from CPW.settings import AUTH_USER_MODEL

class CreateUserForm(UserCreationForm):
    class Meta:
        model = AUTH_USER_MODEL
        fields = ['username', 'email', 'password1', 'password2', 'role']

但它告诉我

from .forms import CreateUserForm
  File "C:\Users\xyz\OneDrive\Desktop\Django\CPW\user_auth\forms.py", line 4, in <module>
    class CreateUserForm(UserCreationForm):
  File "C:\Users\xyz\AppData\Local\Programs\Python\Python37\lib\site-packages\django\forms\models.py", line 258, in __new__
    apply_limit_choices_to=False,
  File "C:\Users\xyz\AppData\Local\Programs\Python\Python37\lib\site-packages\django\forms\models.py", line 142, in fields_for_model
    opts = model._meta
AttributeError: 'str' object has no attribute '_meta'

我从未尝试过自定义用户的形式。帮忙吗?

django django-models django-forms
1个回答
3
投票

AUTH_USER_MODEL
是包含用户模型的
app_name.ModelName
的字符串。您可以在像
ForeignKey
这样的关系中使用它,但不能在
ModelForm
中使用。您可以使用
get_user_model()
函数[Django-doc]
:

from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm

class CreateUserForm(UserCreationForm):
    class Meta:
        model = get_user_model()
        fields = ['username', 'email', 'password1', 'password2', 'role']
© www.soinside.com 2019 - 2024. All rights reserved.