gpt4 book ai didi

django - 类型错误 : __init__() got an unexpected keyword argument in Django Form & Formset

转载 作者:行者123 更新时间:2023-12-04 16:46:50 26 4
gpt4 key购买 nike

遵循 "Passing custom parameters to formset forms" 上的 Django 文档,我得到以下返回:

__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 <listcomp>
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'

这是我的观点,我遵循文档并在表单集 form_kwargs 中传递“选择”。
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
)

解决方案

对于其他遇到此问题的人, kwargs.pop('choices') 确实需要在表单中的 Super() 之上。 初始化

这解决了错误,但随后显示了一个表单集,而没有在 ChoiceField 中加载数据。我将字段更改为 ModelChoiceField 并设置 queryset=None (在 init 中更改。这解决了问题。

最佳答案

打电话前先弹出super :

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

queryset = kwargs.pop('choices')

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

self.fields['old_transaction'].queryset = queryset

关于django - 类型错误 : __init__() got an unexpected keyword argument in Django Form & Formset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47403769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com