2011-07-11 131 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

相關問題