2017-11-16 31 views
2

私は動的選択フィールドを作成しようとしています。タプルのリストを作成するビューがあります。タプルの最初の値はオブジェクトServiceWriterの主キーであり、2番目の値はServiceWriterの名前です。その後、リストはフォームクラスに渡されます。私が選択してページを送信すると、フォームは有効ではないと判断され、シェルに以下のフォームエラーが表示されます: "有効な選択を選択します(タプルの最初の値、つまり1,2,3 ..)。利用可能な選択肢の1つではありません。Djangoフォームエラー:有効な選択肢を選択してください。 ...は利用可能な選択の1つではありません

forms.py 

class CreateAdvancedRO(forms.Form): 
service_writer = forms.ChoiceField() 

def __init__(self, writer_choices, *args, **kwargs): 
    super(CreateAdvancedRO, self).__init__(*args, **kwargs) 
    self.fields['service_writer'].choices = writer_choices 
    self.helper = FormHelper() 
    self.helper.form_id = 'id-create-advanced-ro' 
    self.helper.form_method = 'post' 
    self.helper.add_input(Submit('submit', 'Open Repair Order')) 

注:私はModelFormを使用していません。

views.py 
class CreateAdvancedRO(View):                  
form_class = CreateAdvancedRO                 
writer_form = CreateServiceWriter                
add_line_form = AddJobLine                 

def post(self, request):                  
    writer_choices = []                  
    form = self.form_class(writer_choices, request.POST)          
    print(form.errors)                  
    if form.is_valid():                  
     '''Do something'''       
    else:                                          
     writer_choices = []                 
     try:                     
      writers = ServiceWriter.objects.filter(user=request.user)       
      for writer in writers:               
       writer_choices.append((str(writer.id), writer.name))       
     except ObjectDoesNotExist:               
      pass                    
     form = self.form_class(writer_choices, request.POST)         
     writer_form = self.writer_form()              
     add_line_form = self.add_line_form()             
     return render(request, 'free/advanced_create.html', {'form': form, 'writer_form': wri 
                  'add_line_form': add_line_form}) 

私は、ビューで、次の両方を試してみました:ここ

writer_choices.append((str(writer.id), writer.name)) and 
writer_choices.append((writer.id, writer.name)) 

は、念のために、ServiceWriterモデルです。

class ServiceWriter(models.Model): 
user = models.ForeignKey(User) 
name = models.CharField(max_length=20, blank=False) 

def __str__(self): 
    return str(self.name) 

助けてくれてありがとう。

答えて

1

あなたが選択肢の空のリストに対してフォームを検証しようとしているようです。フォームを検証する前にwriter_choicesを入力しようとしましたか?

+1

ありがとう、それはトリックでした。それは今明らかな継ぎ目! –

関連する問題