在我的表格中,我有:
from pydoc import locate
from django import forms
from django.conf import settings
from django.contrib.auth.forms import UserCreationForm, UsernameField
from django.core.validators import EmailValidator
class SignUpForm(UserCreationForm):
username = UsernameField(label=_("Username"), widget=forms.TextInput(), )
email = forms.EmailField(max_length=254, label="Email", widget=forms.EmailInput(), validators=[EmailValidator])
class Meta:
model = locate(settings.AUTH_USER_MODEL) <--- HERE
fields = ("username", "email", "password1", "password2")
在模型中的用户应用程序中:
class Profile(AbstractUser):
def __str__(self):
return self.username
在我的项目settings.py中进行设置
AUTH_USER_MODEL = 'user.Profile'
它给了我
ValueError at /user/register
ModelForm has no model class specified.
当我改变类元在我的形式来:
class Meta:
model = Profile <--- HERE
一切都好。为什么我的模型= locate(settings.AUTH_USER_MODEL)不起作用?
您可以使用get_user_model()
[Django-doc]方法来获取对您指定为的模型的引用AUTH_USER_MODEL
:
from django.contrib.auth import get_user_model
class SignUpForm(UserCreationForm):
username = UsernameField(
label=_('Username'),
widget=forms.TextInput()
)
email = forms.EmailField(
max_length=254,
label='Email',
widget=forms.EmailInput(),
validators=[EmailValidator]
)
class Meta:
model = get_user_model()
fields = ('username', 'email')
locate
在这种情况下将不起作用,因为它会在找不到模块的情况下返回None
,因此会“静默失败”。Profile
该类的位置是user.models.Profile
,Django仅具有一些用于引用模型的特殊语法。app_name.ModelName
对于另一个模型,可以使用apps.get_model(…)
[Django-doc]函数:
from django.apps import apps
from django import forms
# name of the model
model_name = 'app_name.ModelName'
class MyModelForm(forms.ModelForm):
class Meta:
model = apps.get_model(model_name)
fields = '__all__'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句