保存()缺少1个必需的位置参数:Django中的'request'

azpvetkf  于 2023-10-21  发布在  Go
关注(0)|答案(3)|浏览(103)

我创建一个模型:

class Person(models.Model):
    name = models.CharField(max_length=250)
    slug = AutoSlugField(populate_from='name')
    birth_date = models.DateField(null=True, blank=True)
    blood_group = models.CharField(max_length=5)
    present_address = models.CharField(max_length=250, blank=True)
    permanent_address = models.CharField(max_length=250, blank=True)
    user = models.OneToOneField(
               settings.AUTH_USER_MODEL,
               related_name='member_persons')

forms.py:

class MemberForm(ModelForm):

    class Meta:
        model = Person
        exclude = ('user',)

    def save(self, request, commit=True):
         person = super().save(commit=False)
         if not person.pk:
             person.user = get_user(request)
         if commit:
             person.save()
             self.save_m2m()
         return person

第一人称创作效果很好。当同一个人再次尝试使用不同的数据提交创建表单时,它会给出“保存()”,缺少1个必需的位置参数:请求。完整回溯:

Traceback:

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner
  39.             response = get_response(request)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/views/generic/base.py" in view
  68.             return self.dispatch(request, *args, **kwargs)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/utils/decorators.py" in _wrapper
  67.             return bound_func(*args, **kwargs)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/utils/decorators.py" in bound_func
  63.                 return func.__get__(self, type(self))(*args2, **kwargs2)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/utils/decorators.py" in _wrapper
  67.             return bound_func(*args, **kwargs)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/utils/decorators.py" in bound_func
  63.                 return func.__get__(self, type(self))(*args2, **kwargs2)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/views/generic/base.py" in dispatch
  88.         return handler(request, *args, **kwargs)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/views/generic/edit.py" in post
  217.         return super(BaseCreateView, self).post(request, *args, **kwargs)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/views/generic/edit.py" in post
  183.             return self.form_valid(form)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/views/generic/edit.py" in form_valid
  162.         self.object = form.save()

Exception Type: TypeError at /person/create/
Exception Value: save() missing 1 required positional argument: 'request'

我的views.py:

@require_authenticated_permission(
'member.add_person')
class PersonCreate(CreateView):
    template_name = 'member/person_form.html'
    model = Person
    success_url = '/person/'
    form_class = MemberForm

我想显示一条消息“你已经提交的数据”,而不是得到这个错误。如何在人员创建表单中显示此消息?任何帮助将不胜感激。
编辑:
新错误:
回溯:

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner
  39.             response = get_response(request)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/views/generic/base.py" in view
  68.             return self.dispatch(request, *args, **kwargs)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/utils/decorators.py" in _wrapper
  67.             return bound_func(*args, **kwargs)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/utils/decorators.py" in bound_func
  63.                 return func.__get__(self, type(self))(*args2, **kwargs2)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/utils/decorators.py" in _wrapper
  67.             return bound_func(*args, **kwargs)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/utils/decorators.py" in bound_func
  63.                 return func.__get__(self, type(self))(*args2, **kwargs2)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/views/generic/base.py" in dispatch
  88.         return handler(request, *args, **kwargs)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/views/generic/edit.py" in get
  213.         return super(BaseCreateView, self).get(request, *args, **kwargs)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/views/generic/edit.py" in get
  174.         return self.render_to_response(self.get_context_data())

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/views/generic/edit.py" in get_context_data
  93.             kwargs['form'] = self.get_form()

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/views/generic/edit.py" in get_form
  45.         return form_class(**self.get_form_kwargs())

Exception Type: TypeError at /person/create/
Exception Value: __init__() got an unexpected keyword argument 'request'
dsekswqp

dsekswqp1#

save签名无效。参数中不应该有request。如果要使用get_form将其传递给form

@require_authenticated_permission('member.add_person')
class PersonCreate(CreateView):
    template_name = 'member/person_form.html'
    model = Person
    success_url = '/person/'
    form_class = MemberForm

    def get_form(self, form_class=None):
        form = super().get_form(form_class)
        form.request = self.request
        return form

然后

class MemberForm(ModelForm):

    class Meta:
        model = Person
        exclude = ('user',)

    def save(self, commit=True):
         person = super().save(commit=False)
         if not person.pk:
             person.user = get_user(self.request)
         if commit:
             person.save()
             self.save_m2m()
         return person
jxct1oxe

jxct1oxe2#

我以这种方式发送这些参数

class MemberNew(generic.CreateView):

    model = Member
    form_class = MemberForm
    template_name = "..."

    def get_form(self, form_class=None):
        return MemberForm(self.request, **self.get_form_kwargs())
zte4gxcn

zte4gxcn3#

有时,当您忘记在View中的函数“perform create”中的保存函数中添加参数时,可能会发生此类错误。:

# views.py
class UserRegisterView(CreateAPIView):
  def get_queryset(self):
      return User.objects.all()
   
  def get_serializer_class(self):
      return user_serializers.CustomUserRegisterSerializer

  def perform_create(self, serializer):
      serializer.save(self.request)

相关问题