int()参数必须是字符串或数字,而不是'QueryDict'

dar*_*ren 4 django django-forms

我在表单上渲染了3个多选框.我正在过滤每个盒子以分开一天.当我提交表单时,我收到此错误.

int() argument must be a string or a number, not 'QueryDict'
Run Code Online (Sandbox Code Playgroud)

我该怎么办才能保存我的表格?

这就是我在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)
Run Code Online (Sandbox Code Playgroud)

我这样得到我的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))
Run Code Online (Sandbox Code Playgroud)

pho*_*oku 7

您对参数列表和关键字参数感到困惑:

代替:

ContractForm(instance=contract, project_id=contract.project_id)
Run Code Online (Sandbox Code Playgroud)

你要:

ContractForm(contract.project_id, instance=contract)
Run Code Online (Sandbox Code Playgroud)

详细说明:您的构造函数接受项目id作为第一个参数而不是关键字参数.因此,您需要将其作为第一个参数.简单的困惑,嗯?