Python ModelForm没有指定模型类。[django]
在我的表格中我有:Python ModelForm没有指定模型类。[django],python,django,authentication,Python,Django,Authentication,在我的表格中我有: 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)
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")
在myproject settings.py中,我设置了
AUTH_USER_MODEL = 'user.Profile'
它给了我
ValueError at /user/register
ModelForm has no model class specified.
当我将我的表格中的class Meta更改为:
class Meta:
model = Profile <--- HERE
类元:
model=Profile您可以使用获取对指定为AUTH\u USER\u 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做什么?也许locate
方法不返回模型类?locate应该转到“设置”并从那里获取:AUTH\u USER\u model='USER.Profile'@AM0k:问题是'USER.Profile'
不是有效的合格名称。这应该是user.models.Profile
(但您不能使用它,因为Django使用的命名系统略有不同)。您可以使用应用程序。获取用户模型(…)
但是对于用户模型,您可以直接使用获取用户模型()
。非常感谢。。。我的解决方案和我的完全一样。没关系,我的工作
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')
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__'