2011-07-11 11 views
4

フォームに3つの選択ボックスをレンダリングしています。 私はそれぞれのボックスをフィルタリングして、別々のタイプの日を持っています。 フォームを送信すると、このエラーが発生します。int()引数は、 'QueryDict'ではなく文字列または数字でなければなりません

int() argument must be a string or a number, not 'QueryDict' 

フォームを保存するにはどうすればよいですか?

これは、各選択ボックスごとに異なるフィルタリングを得るために私が自分のforms.pyファイルで行っていることです。

class ContractForm(forms.ModelForm): 

    def __init__(self, project_id, *args, **kwargs): 
     super(ContractForm, self).__init__(*args, **kwargs) 
     self.fields['shoot_day'].queryset = Day.objects.filter(type=SHOOT, project__id=project_id) 
     self.fields['travel_day'].queryset = Day.objects.filter(type=TRAVEL, project__id=project_id) 
     self.fields['additional_day'].queryset = Day.objects.filter(type=ADDITIONAL, project__id=project_id) 

私はそうのように私のPROJECT_IDを取得しています:

def editcontract(request, contract_id, slug): 
    context_dict = {} 
    contract = get_object_or_404(Contract, pk=contract_id) 
    if request.method == 'POST': 
     form = ContractForm(request.POST, instance=contract) 
     if form.is_valid(): 
      form.save() 
      TvUsageForm = TvUsageFormSet(request.POST, instance=contract) 
      AdditionalMediaUsageForm = AdditionalMediaUsageFormSet(request.POST, instance=contract) 
      TvUsageForm.save() 
      AdditionalMediaUsageForm.save() 
      return HttpResponseRedirect(reverse('contract_list', kwargs={'slug':slug})) 
    else: 
     form = ContractForm(instance=contract, project_id=contract.project_id) 
     TvUsageForm = TvUsageFormSet(instance=contract) 
     AdditionalMediaUsageForm = AdditionalMediaUsageFormSet(instance=contract) 
     project = get_object_or_404(Project, slug=slug) 
     context_dict = { 'form': form, 
         'tvusage_form':TvUsageForm, 
         'additional_form':AdditionalMediaUsageForm, 
         'project':project 
     } 
    return render_to_response('contracts/edit_contract.html', context_dict, RequestContext(request)) 
+0

あなたはどこから 'project_id'を取得するかを示していないので、私たちはあなたを助けることができません。 –

+0

が更新されました。質問の私の編集を見てください。ありがとう – darren

答えて

7

あなたは引数リストとキーワード引数との混同を持っています。

の代わりに:

ContractForm(instance=contract, project_id=contract.project_id) 

あなたが欲しい:

ContractForm(contract.project_id, instance=contract) 

は詳しく説明するには:あなたのコンストラクタは最初の引数としてのキーワードではない引数としてプロジェクトIDを受け入れます。したがって、最初の引数として与える必要があります。簡単な混乱、ええ?

+0

フォームの初期レンダリングに問題はありません。しかし、私はあなたが提案したものを試しました。私は私のフォームを提出するときにも同じエラーが表示されます。あなたの提案に基づいて私は 'form = ContractForm(request.POST、contract.project_id、instance = contract)'を試しましたが、それでも私は同じ問題を抱えています。 – darren

+1

あなたは正しいです!私は 'form = ContractForm(contract.project_id、request.POST、instance = contract)'を変更しました。私は今あなたが議論の順序について何を意味しているのか理解しています。ありがとう。 – darren

関連する問題