2016-03-04 42 views
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 

在這裏,在上面的表格我無法弄清楚如何處理地區和國家按我的要求,我上面說,這樣,當用戶被保存,她與一個特定的地區和州相關聯。地區下拉菜單將根據她選擇的狀態動態填充。

+0

看一看這個答案http://stackoverflow.com/a/3233909/2549021。 – AKS

回答

相關問題