【问题标题】:Django forms gives 'str' object has no attribute '_meta'Django表单给出'str'对象没有属性'_meta'
【发布时间】:2021-08-30 18:30:42
【问题描述】:

我正在制作一个看起来像这样的自定义用户模型

accounts/models.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】:

    AUTH_USER_MODEL 是一个包含用户模型的<i>app_name</i>.<i>ModelName</i> 的字符串。您可以在ForeignKey 等关系中使用它,但不能在ModelForm 中使用。您可以使用get_user_model() function [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']

    【讨论】:

    • 该死的,工作了很多人。一定会阅读您链接的文档。
    猜你喜欢
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 2010-10-22
    • 2022-09-23
    • 2015-02-28
    • 1970-01-01
    相关资源
    最近更新 更多