配置不当的表单 - Django
Improperly Configured Form - Django
最近,我弄清楚了如何在 Django 中创建注册。问题是只有三个字段 - username
、password
和它的确认。
在我的项目中,至少会有两种不同属性的users
。 Customers
和 Freelancers
。所以我尝试制作我在 Whosebug 上找到的新模型,但它 returns 异常:
Exception Type: ImproperlyConfigured
Exception Value:
Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is prohibited; form UserCreateForm needs updating.
MODELS.PY:
class UserCustomerProfile(models.Model):
user = models.OneToOneField(User)
email = models.EmailField()
age = models.IntegerField()
def __str__(self):
return "%s's profile" % self.user
FORMS.PY:
class UserCreateForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
def save(self, commit=True):
if not commit:
raise NotImplementedError("Can't create User and UserProfile without database save")
user = super(UserCreateForm, self).save(commit=True)
user_profile = UserCustomerProfile(user=user, email=self.cleaned_data['email'])
user_profile.save()
return user, user_profile
VIEWS.PY:
def register(request):
if request.method == 'POST':
form = UserCustomerProfile(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('register/complete/')
else:
form = UserCreateForm()
token = {}
token.update(csrf(request))
token['form'] = form
return render_to_response('register/registration_form.html', token)
你知道如何解决这个问题吗?
Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is prohibited; form UserCreateForm needs updating.
尝试例如:
class UserCreateForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ['email', ]
您需要将 “字段”属性 添加到 “Meta”内部 class in ” UserCreateForm(UserCreationForm)" class如下图:
FORMS.PY:
class UserCreateForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ("username", "email")
# ↑ ↑ ↑ Here ↑ ↑ ↑
def save(self, commit=True):
if not commit:
raise NotImplementedError("Can't create User and UserProfile without database save")
user = super(UserCreateForm, self).save(commit=True)
user_profile = UserCustomerProfile(user=user, email=self.cleaned_data['email'])
user_profile.save()
return user, user_profile
或者,您需要添加 "exclude" 属性 到 "Meta" inner class in "UserCreateForm(UserCreationForm)" class如下图:
FORMS.PY:
class UserCreateForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
exclude = ("first_name", "last_name")
# ↑ ↑ ↑ Here ↑ ↑ ↑
def save(self, commit=True):
if not commit:
raise NotImplementedError("Can't create User and UserProfile without database save")
user = super(UserCreateForm, self).save(commit=True)
user_profile = UserCustomerProfile(user=user, email=self.cleaned_data['email'])
user_profile.save()
return user, user_profile
最近,我弄清楚了如何在 Django 中创建注册。问题是只有三个字段 - username
、password
和它的确认。
在我的项目中,至少会有两种不同属性的users
。 Customers
和 Freelancers
。所以我尝试制作我在 Whosebug 上找到的新模型,但它 returns 异常:
Exception Type: ImproperlyConfigured
Exception Value:
Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is prohibited; form UserCreateForm needs updating.
MODELS.PY:
class UserCustomerProfile(models.Model):
user = models.OneToOneField(User)
email = models.EmailField()
age = models.IntegerField()
def __str__(self):
return "%s's profile" % self.user
FORMS.PY:
class UserCreateForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
def save(self, commit=True):
if not commit:
raise NotImplementedError("Can't create User and UserProfile without database save")
user = super(UserCreateForm, self).save(commit=True)
user_profile = UserCustomerProfile(user=user, email=self.cleaned_data['email'])
user_profile.save()
return user, user_profile
VIEWS.PY:
def register(request):
if request.method == 'POST':
form = UserCustomerProfile(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('register/complete/')
else:
form = UserCreateForm()
token = {}
token.update(csrf(request))
token['form'] = form
return render_to_response('register/registration_form.html', token)
你知道如何解决这个问题吗?
Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is prohibited; form UserCreateForm needs updating.
尝试例如:
class UserCreateForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ['email', ]
您需要将 “字段”属性 添加到 “Meta”内部 class in ” UserCreateForm(UserCreationForm)" class如下图:
FORMS.PY:
class UserCreateForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ("username", "email")
# ↑ ↑ ↑ Here ↑ ↑ ↑
def save(self, commit=True):
if not commit:
raise NotImplementedError("Can't create User and UserProfile without database save")
user = super(UserCreateForm, self).save(commit=True)
user_profile = UserCustomerProfile(user=user, email=self.cleaned_data['email'])
user_profile.save()
return user, user_profile
或者,您需要添加 "exclude" 属性 到 "Meta" inner class in "UserCreateForm(UserCreationForm)" class如下图:
FORMS.PY:
class UserCreateForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
exclude = ("first_name", "last_name")
# ↑ ↑ ↑ Here ↑ ↑ ↑
def save(self, commit=True):
if not commit:
raise NotImplementedError("Can't create User and UserProfile without database save")
user = super(UserCreateForm, self).save(commit=True)
user_profile = UserCustomerProfile(user=user, email=self.cleaned_data['email'])
user_profile.save()
return user, user_profile