Django向Form传递参数,得到KeyError

标签 django django-forms django-views django-errors

我正在尝试传递两个参数来初始化我的表单,我尝试了不同的方法来实现此目的,但我在结束时遇到了相同的错误,这是我收到的错误(回溯):

Traceback (most recent call last):
  File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\views\generic\base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\views\generic\base.py", line 97, in dispatch
    return handler(request, *args, **kwargs)
  File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\views\generic\edit.py", line 168, in get
    return super().get(request, *args, **kwargs)
  File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\views\generic\edit.py", line 133, in get
    return self.render_to_response(self.get_context_data())
  File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\views\generic\edit.py", line 66, in get_context_data
    kwargs['form'] = self.get_form()
  File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\views\generic\edit.py", line 33, in get_form
    return form_class(**self.get_form_kwargs())
  File "C:\Users\jorge.lopez\Documents\Personal\Carros\carros\AC\forms.py", line 100, in __init__
    self.carro = kwargs.pop('carro')

Exception Type: KeyError at /payments/addtoexistingweek/1/2020-W07
Exception Value: 'carro'

更新

Exception Type: NoReverseMatch at /payments/addtoexistingweek/1/2020-W07
Exception Value: Reverse for 'pagoaexistente' with no arguments not found. 1 pattern(s) tried: ['payments/addtoexistingweek/(?P<carro>[0-9]+)/(?P<semana>[-a-zA-Z0-9_]+)$']

urls.py

path('payments/addtoexistingweek/<int:carro>/<slug:semana>',
         views.AgregarPagoSemana.as_view(), name='pagoaexistente'),

views.py

更新

class AgregarPagoSemana(CreateView):

    template_name = "AC/add_paymentexistingweek.html"
    model = Pagos
    form_class = AgregarPagoTransaccionExistente

    def get_form_kwargs(self):
        kwargs = super(AgregarPagoSemana, self).get_form_kwargs()
        kwargs['carro'] = self.kwargs.get('carro')
        kwargs['semana'] = self.kwargs.get('semana')
        return kwargs

forms.py

class AgregarPagoTransaccionExistente(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        self.carro = kwargs.pop('carro')
        self.semana = kwargs.pop('semana')
        super(AgregarPagoTransaccionExistente, self).__init__(*args, **kwargs)

    class Meta:
        model = Pagos
        fields = ('carro', 'pago', 'fecha', 'semana', 'renta')
        widgets = {'fecha': forms.DateInput(attrs={'type': 'date'}),
                   'semana': forms.DateInput(attrs={'type': 'week'})
                   }

我不知道我是否正确理解了错误,并且“carro”没有获得值。

最佳答案

您正在将 kwarg 'carro' 传递给 View ,而不是传递给表单。

在您看来,重写“get_form_kwargs”方法并返回 kwarg。

def get_form_kwargs(self):
    kwargs = super(InternalResetPasswordView, self).get_form_kwargs()
    kwargs['carro'] = self.kwargs.get('carro')
    return kwargs

关于Django向Form传递参数,得到KeyError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60344442/

相关文章:

python - 将查询集传递给django inlineform中的foreignkeyfield

python - django if 语句中的括号

python - 找不到服务 "taskqueue"的 api 代理

django - 如何在 Django REST Framework 中更改字段名称

python - Django:测试中的一般帮助

django - 为什么我排除的字段仍然出现在这个 Django 表单中?

python - 如何在基于类的通用 View 中使用分页?

django - django 表单的 ViewDoesNotExist/Import 错误

python - 使用 Postman 将外键发布到 Django Rest Framework

python - 如何将 Web API 与 Django 结合使用