form是JAVA关键字么_TypeError:__ init __()在Django Form&Formset中得到了一个意外的关键字参数...

__init__() got an unexpected keyword argument 'choices'

File "/Users/emilepetrone/Envs/kishikoi/lib/python3.6/site-packages/django/utils/functional.py" in __get__

35. res = instance.__dict__[self.name] = self.func(instance)

File "/Users/emilepetrone/Envs/kishikoi/lib/python3.6/site-packages/django/forms/formsets.py" in forms

144. for i in range(self.total_form_count())]

File "/Users/emilepetrone/Envs/kishikoi/lib/python3.6/site-packages/django/forms/formsets.py" in

144. for i in range(self.total_form_count())]

File "/Users/emilepetrone/Envs/kishikoi/lib/python3.6/site-packages/django/forms/formsets.py" in _construct_form

182. form = self.form(**defaults)

File "/Users/emilepetrone/Sites/kishikoi/kishikoi/transactions/forms.py" in __init__

119. super(SoldTransactionForm, self).__init__(*args, **kwargs)

Exception Type: TypeError at /transactions/create/sell/transactions/31tmhqsplg41jc8c/

Exception Value: __init__() got an unexpected keyword argument 'choices'

这是我的观点,我按照文档并在formset form_kwargs中传递'choices' .

class SellTransactionsView(LoginRequiredMixin, SetHeadlineMixin, UpdateView):

model = Transaction

template_name = "transactions/soldtransaction_form.html"

headline = "Sell Transaction"

fields = ['num_shares']

def get_object(self):

return Transaction.objects.get(

user=self.request.user,

identifier=self.kwargs['identifier']

)

def get_choices(self):

transaction = self.get_object()

choices = Transaction.objects.filter(

user=transaction.user,

).exclude(identifier=transaction.identifier)

return choices

def get_context_data(self, *args, **kwargs):

context = super(SellTransactionsView, self).get_context_data(

*args, **kwargs)

choices = self.get_choices()

formset = SoldFormset(form_kwargs={'choices': choices})

context.update({

"formset": formset,

})

return context

我的表单和表单集 - 我正在使用forms.Form,因为我将使用这些字段来更新form.is_valid()中的其他字段 .

class SoldTransactionForm(forms.Form):

old_transaction = forms.ChoiceField()

num_shares = forms.IntegerField(

min_value=0

)

class Meta:

fields = [

'old_transaction',

'num_shares',

]

def __init__(self, *args, **kwargs):

super(SoldTransactionForm, self).__init__(*args, **kwargs)

self.fields['old_transaction'].queryset = kwargs.pop('choices')

SoldFormset = forms.formset_factory(

SoldTransactionForm,

formset=forms.BaseFormSet,

extra=2

)

SOLUTION

对于其他人来说,kwargs.pop('choices')确实需要高于表格中的Super() . init

这解决了错误,但随后呈现了一个formset而没有在ChoiceField中加载数据 . 我将字段更改为ModelChoiceField并设置queryset = None(要在 init 中更改 . 这解决了问题 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值