django - 为什么 form.is_valid() 总是需要返回字段?
问题描述
我不知道为什么我的表单在提交后总是返回需要电话,我被这个问题困扰了大约一个小时:(,我看到很多文章和问题已经被问到但无济于事。
视图.py:
def register(request):
if request.method == 'POST':
form = SignUpForm(request.POST or None)
if form.is_valid():
user = form.save(commit=False)
telephone = number_prettify(form.cleaned_data.get('telephone'))
user.phone = telephone
raw_password = form.cleaned_data.get('password1')
user.save()
user = authenticate(phone=user.phone, password=raw_password)
auth_login(request, user)
return redirect('/')
else:
form = SignUpForm()
return render(request, 'register.html', {'form': form})
这是我的forms.py:
from django import forms
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm
# from .models import Client
User = get_user_model()
class SignUpForm(UserCreationForm):
telephone = forms.CharField(label='Номер телефона', help_text='Required. Inform a valid phone number.',
widget=forms.TextInput(attrs={'placeholder': '___-__-__-__','class':"uk-input phone_us"}))
password1 = forms.CharField(label='Пароль',widget=forms.PasswordInput())
password2 = forms.CharField(label='Повторите пароль',widget=forms.PasswordInput())
agree_1 = forms.BooleanField()
agree_2 = forms.BooleanField()
def clean(self):
if not self.cleaned_data['agree_1']:
raise forms.ValidateError('You have to agree to out privacy')
class Meta:
model = User
fields = ('phone',)
这也是models.py:
class Client(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(null=True, blank=True, unique=True)
phone = models.CharField(max_length=18,unique=True)
joined = models.DateTimeField(auto_now_add=True)
password = models.CharField(default='', null=False, max_length=255)
USERNAME_FIELD = 'phone'
class Meta:
db_table = 'client'
unique_together = ('phone',)
我的register.html模板:
<div class="uk-margin">
<label>
<div class="uk-margin-small-bottom">{{form.telephone.label}} <span>*</span></div>
{{form.telephone}}
</label>
</div>
<div class="uk-margin">
<label>
<div class="uk-margin-small-bottom">{{form.password1.label}} <span>*</span></div>
{{form.password1|add_class:"uk-input"}}
</label>
</div>
解决方案
您应该将字段从 更改telephone
为phone
。
class SignUpForm(UserCreationForm):
phone = forms.CharField(label='Номер телефона', help_text='Required. Inform a valid phone number.',
widget=forms.TextInput(attrs={'placeholder': '___-__-__-__','class':"uk-input phone_us"}))
password1 = forms.CharField(label='Пароль',widget=forms.PasswordInput())
password2 = forms.CharField(label='Повторите пароль',widget=forms.PasswordInput())
agree_1 = forms.BooleanField()
agree_2 = forms.BooleanField()
def clean(self):
if not self.cleaned_data['agree_1']:
raise forms.ValidateError('You have to agree to out privacy')
class Meta:
model = User
fields = ('phone',)
推荐阅读
- mysql - 从列中删除某些逗号分隔的数据
- c++ - 单 PID 双摆
- python - SCAPY FORM REQUEST 不返回任何数据
- python - Anaconda 每次在新的 conda 环境中安装软件包时都会下载软件包吗?
- python-3.x - 元组组件 16 中的形状不匹配。预期 [1,?,?,3],得到 [1,1,242,640,3]
- postgresql - PostgreSQL 因真空和自动真空而失败
- c++ - 错误 C2440:“正在初始化”:无法从“std::vector<_Ty>”转换为“std::vector<_Ty>”
- node.js - 使用 Vuejs 使用一个选项卡进行控制,另一个用于显示
- python - 如何在 Django Channels 消费者连接方法中执行获取请求?
- firebase - TypeORM + Express 部署到 Firebase 云功能无法连接到 Cloud SQL