1
我正在構建一個基於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://stackoverflow.com/a/3233909/2549021。 – AKS