2016-03-05 56 views
1

我已經在Django創建一個自定義用戶登記表如下動態填充下拉列表的領域:基於問題與Django中自定義用戶登記表

class RegistrationForm(UserCreationForm): 

    state = forms.ModelChoiceField(State.objects.all()) 
    booth = forms.ModelChoiceField(Booth.objects.none()) 
    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 = ['state', 'booth', 'first_name', 'last_name', 'voter_id', 'date_of_birth', 'sex', 'is_election_staff'] 

展位然後在register.html我填充下拉列表狀態她選擇如下:

$(document).ready(function() { 
      $('.datepicker').datepicker(); 
      $('#id_state').on('change', function() { 
       alert(this.value); 
       $.ajax({ 
        url: '/voting/api/booths/', 
        dataType: 'json', 
        type: 'GET', 
        data: {state_id : $('#id_state').val()}, 
        success: function(data) { 
         $('#id_booth').empty(); 
         for (row in data) { 
          $('#id_booth').append($('<option></option>').attr('value', data[row].id).text(data[row].name)); 
         } 
        } 
       }); 
      }); 

     }); 

但問題是,提交表格時我得到在UI以下錯誤信息:

選擇一個有效的選項。該選擇不是可用選項之一

請任何人都可以告訴我我在這裏做了什麼錯誤。

編輯:在我的views.py處理registation表單提交:

@csrf_protect 
    def register(request): 
    if request.method == 'POST': 
    form = RegistrationForm(request.POST) 
    pdb.set_trace() 
    if form.is_valid(): 
     print "In register request = "+ str(request.POST) 
     form.save() 
     return HttpResponseRedirect('/voting/register/success/') 
    else: 
     form = RegistrationForm() 
    variables = RequestContext(request, { 
     'form': form 
    }) 
return render_to_response(
'registration/register.html', 
variables, 
) 

在這裏,在上面查看功能我已經檢查form.is_valid(),它返回false。任何人都可以向我建議我在做什麼錯誤。

+0

是'state'和'booth'領域應該接受比一個參數的更多? –

+0

是的都是下拉列表 – Joy

+0

發佈完整的回溯。 –

回答

0

展位值應該在您傳遞給該字段的查詢集中 - Booth.objects.none() - 現在它總是空的。

可以動態改變這個查詢集,像這樣:

class RegistrationForm(UserCreationForm): 

    # your fields here 

    def __init__(self, *args, **kwargs): 
     super(RegistrationForm, self).__init__(*args, **kwargs) 

     # check state in POST data and change qs 
     if 'state' in self.data: 
      self.fields['booth'].queryset = Booth.objects.filter(state_id=self.data.get('state'))