Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何将用户id从视图传递到表单';s初始化方法?_Django_Python 3.x - Fatal编程技术网

Django 如何将用户id从视图传递到表单';s初始化方法?

Django 如何将用户id从视图传递到表单';s初始化方法?,django,python-3.x,Django,Python 3.x,我已经复习了很多问题/答案好几个小时,并应用了很多技巧,但我无法将用户id传递给表单init()方法,它总是会出现类似“init()得到意外的关键字参数“request”这样的错误。有人知道原因吗 根据评论中的要求更新的表格: class ChildChoreForm(ModelForm): class Meta: model = ChildChore exclude = ('child',) fields = '__all__' def __init__(se

我已经复习了很多问题/答案好几个小时,并应用了很多技巧,但我无法将用户id传递给表单init()方法,它总是会出现类似“init()得到意外的关键字参数“request”这样的错误。有人知道原因吗

根据评论中的要求更新的表格:

class ChildChoreForm(ModelForm):
  class Meta:
    model = ChildChore
    exclude = ('child',)
    fields = '__all__'

  def __init__(self, *args, **kwargs):
    self.request = kwargs.pop('request', None)
    super(ChildChoreForm, self).__init__(*args, **kwargs)
    self.fields['chore'].queryset = Chore.objects.filter(created_by=self.request.user)

ChildChoreFormSet = inlineformset_factory(Child,  ChildChore, form=ChildChoreForm, extra=1)
视图:

打开updaet网页后出现的错误:

Internal Server Error: /chore/children/23
Traceback (most recent call last):
  File "C:\Python\lib\site-packages\django\core\handlers\exception.py", line 35, in inner
    response = get_response(request)
  File "C:\Python\lib\site-packages\django\core\handlers\base.py", line 128, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Python\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Python\lib\site-packages\django\contrib\auth\decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "C:\Python\lib\site-packages\django\views\generic\base.py", line 69, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Python\lib\site-packages\django\views\generic\base.py", line 89, in dispatch
    return handler(request, *args, **kwargs)
  File "C:\Python\lib\site-packages\django\views\generic\edit.py", line 190, in get
    return super().get(request, *args, **kwargs)
  File "C:\Python\lib\site-packages\django\views\generic\edit.py", line 133, in get
    return self.render_to_response(self.get_context_data())
  File "C:\Python\py_projects\children_chores\chore\views.py", line 202, in get_context_data
    data = super(ChildChoreUpdate, self).get_context_data(**kwargs )
  File "C:\Python\lib\site-packages\django\views\generic\edit.py", line 66, in get_context_data
    kwargs['form'] = self.get_form()
  File "C:\Python\lib\site-packages\django\views\generic\edit.py", line 33, in get_form
    return form_class(**self.get_form_kwargs())
  File "C:\Python\lib\site-packages\django\forms\models.py", line 898, in __init__
    super().__init__(data, files, prefix=prefix, queryset=qs, **kwargs)
  File "C:\Python\lib\site-packages\django\forms\models.py", line 569, in __init__
    super().__init__(**defaults)
TypeError: __init__() got an unexpected keyword argument 'request'
Internal Server Error: /chore/children/23
Traceback (most recent call last):
  File "C:\Python\lib\site-packages\django\core\handlers\exception.py", line 35, in inner
    response = get_response(request)
  File "C:\Python\lib\site-packages\django\core\handlers\base.py", line 128, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Python\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Python\lib\site-packages\django\contrib\auth\decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "C:\Python\lib\site-packages\django\views\generic\base.py", line 69, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Python\lib\site-packages\django\views\generic\base.py", line 89, in dispatch
    return handler(request, *args, **kwargs)
  File "C:\Python\lib\site-packages\django\views\generic\edit.py", line 190, in get
    return super().get(request, *args, **kwargs)
  File "C:\Python\lib\site-packages\django\views\generic\edit.py", line 133, in get
    return self.render_to_response(self.get_context_data())
  File "C:\Python\py_projects\children_chores\chore\views.py", line 202, in get_context_data
    data = super(ChildChoreUpdate, self).get_context_data(**kwargs )
  File "C:\Python\lib\site-packages\django\views\generic\edit.py", line 66, in get_context_data
    kwargs['form'] = self.get_form()
  File "C:\Python\lib\site-packages\django\views\generic\edit.py", line 33, in get_form
    return form_class(**self.get_form_kwargs())
  File "C:\Python\lib\site-packages\django\forms\models.py", line 898, in __init__
    super().__init__(data, files, prefix=prefix, queryset=qs, **kwargs)
  File "C:\Python\lib\site-packages\django\forms\models.py", line 569, in __init__
    super().__init__(**defaults)
TypeError: __init__() got an unexpected keyword argument 'request'

问题是,您已将表单设置为接受
\uuuu init\uuuu
中的
请求
参数,但您正在初始化表单集,而不是表单。您需要将表单集修改为,并将其传递给表单集中的表单:

# First define a base class that overrides __init__ and get_form_kwargs
from django.forms import BaseFormSet

class BaseChildChoreFormSet(BaseFormSet):

    def __init__(self, *args, **kwargs):
        # Handle the request argument that you are passing on init
        self.request = kwargs.pop('request', None)
        super().__init__(*args, **kwargs)

    def get_form_kwargs(self, index):
        kwargs = super().get_form_kwargs(index)
        # Add request to the kwargs that are passed to the form on init
        kwargs['request'] = self.request
        return kwargs

# Now set up your formset using this class
ChildChoreFormSet = inlineformset_factory(
    Child,  ChildChore, form=ChildChoreForm, formset=BaseChildChoreFormSet, extra=1)

您可以发布错误的完整堆栈跟踪吗?同时向我们显示您定义
ChildChoreFormSet
的代码,因为这是最有可能出现问题的地方。您正在将一个
请求
参数传递给表单集构造函数,而不是表单构造函数。请根据请求进行更新,谢谢高级。您使用的是自定义表单还是基于django模型的表单?它是基于模型的表单。。。我有一个用于填充/更新子数据的表单,在该表单下有一个用于家务的表单集,其中有一个标题和其他字段,但标题是由不同用户创建的下拉列表。因此,我想根据当前用户(父亲/母亲)对其进行过滤。除此之外,我想知道为什么我不能将请求传递给表单集,因为我可能会出于不同的目的使用相同的解决方案。
# First define a base class that overrides __init__ and get_form_kwargs
from django.forms import BaseFormSet

class BaseChildChoreFormSet(BaseFormSet):

    def __init__(self, *args, **kwargs):
        # Handle the request argument that you are passing on init
        self.request = kwargs.pop('request', None)
        super().__init__(*args, **kwargs)

    def get_form_kwargs(self, index):
        kwargs = super().get_form_kwargs(index)
        # Add request to the kwargs that are passed to the form on init
        kwargs['request'] = self.request
        return kwargs

# Now set up your formset using this class
ChildChoreFormSet = inlineformset_factory(
    Child,  ChildChore, form=ChildChoreForm, formset=BaseChildChoreFormSet, extra=1)