int()参数必须是一个字符串或数字,而不是'QueryDict' [英] int() argument must be a string or a number, not 'QueryDict'

查看:134
本文介绍了int()参数必须是一个字符串或数字,而不是'QueryDict'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在表单上渲染3个多个选择框。
我正在对每个框进行过滤,使其具有单独的一天。
当我提交表单时,我收到这个错误。

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

我要做什么来保存我的表单? / p>

这是我在我的forms.py文件上做的,以获取每个选择框的不同过滤。

  class ContractForm(forms.ModelForm):

def __init __(self,project_id,* args,** kwargs):
super(ContractForm,自己)___(* 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像这样: p>

  def editcontract(reque st,contract_id,slug):
context_dict = {}
contract = get_object_or_404(Contract,pk = contract_id)
如果request.method =='POST':
form = ContractForm (request.POST,instance = contract)
如果form.is_valid():
form.save()
TvUsageForm = TvUsageFormSet(request.POST,instance = contract)
AdditionalMediaUsageForm = AdditionalMediaUsageFormSet(request.POST,instance = contract)
TvUsageForm.save()
AdditionalMediaUsageForm.save()
返回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 = {'for m':form,
'tvusage_form':TvUsageForm,
'additional_form':AdditionalMediaUsageForm,
'project':project
}
return render_to_response('contracts / edit_contract .html',context_dict,RequestContext(request))


解决方案

您对参数列表和关键字参数有混淆:



而不是:

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

p>

  ContractForm(contract.project_id,instance = contract)

要详细说明:您的构造函数接受项目ID作为第一个参数而不是关键字参数。所以你需要把它作为第一个参数。简单的混乱,嗯?


I'm rendering out 3 multiple select boxes on my form. I'm filtering each box out to have a seperate type of day. When I submit my form I get this error.

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

What must I do to save my form?

This is what i'm doing on my forms.py file to get the different filtering for each select box.

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)


I'm getting my project_id like so:

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))

解决方案

You have a confusion with the argument list and keyword arguments:

Instead of:

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

You want:

ContractForm(contract.project_id, instance=contract)

To elaborate: Your constructor accepts the project id as first argument not as keyword argument. Thus you need to give it as first argument. Simple confusion, eh?

这篇关于int()参数必须是一个字符串或数字,而不是'QueryDict'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆