在Django的自定义用户注册表中处理动态下拉字段
问题描述:
我正在构建一个基于python django的系统,用户可以在每个州的基础上注册每个区域。在这里我想要一个这样的注册表格,首先会有一个状态下拉菜单,其中一个状态将从其中选择,然后根据她的选择,另一个区域下拉菜单将被填充,然后用户的其他区域像姓名,电子邮件,mobile_num必须填写。在Django的自定义用户注册表中处理动态下拉字段
现在,我已经建立了一个用户注册表单类似如下:
class RegistrationForm(UserCreationForm):
district_id = <Yet to be implemented>
state_id = <Yet to be implemented>
first_name = forms.RegexField(regex=r'^\w+$', widget=forms.TextInput(attrs=dict(required=True, max_length=30)), label=_("First name"), error_messages={ 'invalid': _("This value must contain only letters") })
last_name = forms.RegexField(regex=r'^\w+$', widget=forms.TextInput(attrs=dict(required=True, max_length=30)), label=_("Last name"), error_messages={ 'invalid': _("This value must contain only letters") })
password1 = forms.CharField(widget=forms.PasswordInput(attrs=dict(required=True, max_length=30, render_value=False)), label=_("Password"))
password2 = forms.CharField(widget=forms.PasswordInput(attrs=dict(required=True, max_length=30, render_value=False)), label=_("Password (again)"))
date_of_birth = forms.DateField(widget=forms.TextInput(attrs= {'class':'datepicker'}))
sex = forms.ChoiceField(choices=(('M', 'MALE'), ('F', 'FEMALE')), label=_("Sex"))
voter_id = forms.CharField(widget=forms.TextInput(attrs=dict(required=True, max_length=30)), label=_("Voter Id"))
is_election_staff = forms.BooleanField(initial=False, required=False)
class Meta:
model = CustomUser
fields = ['first_name', 'last_name', 'voter_id', 'date_of_birth', 'sex', 'is_election_staff', 'district_id', 'state_id']
def clean_username(self):
try:
user = User.objects.get(voter_id__iexact=self.cleaned_data['voter_id'])
except User.DoesNotExist:
return self.cleaned_data['voter_id']
raise forms.ValidationError(_("The user with given voter id already exists. Please try another one."))
def clean(self):
if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data:
if self.cleaned_data['password1'] != self.cleaned_data['password2']:
raise forms.ValidationError(_("The two password fields did not match."))
return self.cleaned_data
def save(self, commit=True):
# Save the provided password in hashed format
user = super(RegistrationForm, self).save(commit=False)
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.date_of_birth = self.cleaned_data['date_of_birth']
user.sex = self.cleaned_data['sex']
user.voter_id = self.cleaned_data['voter_id']
user.is_election_staff = self.cleaned_data['is_election_staff']
user.username = user.voter_id
# user.set_password(self.cleaned_data['password1'])
if commit:
user.save()
return user
在这里,在上面的表格我无法弄清楚如何处理地区和国家按我的要求,我上面说,这样,当用户被保存,她与一个特定的地区和州相关联。地区下拉菜单将根据她选择的状态动态填充。
看一看这个答案http://*.com/a/3233909/2549021。 – AKS