2016-11-03 4 views
0

создать модель:сохранить() отсутствует 1 необходимые позиционная аргумент: 'запрос' в Джанго

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 

Он работал отлично для первого лица создать. Когда тот же человек снова пытается представить форму создания с разными данными, он дает «save() missing 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 

Я хочу, чтобы показать сообщение «Вы уже представили данные», а не получать эту ошибку. Как я могу показать это сообщение в форме создания человека? Любая помощь будет оценена по достоинству.

Edit:

Новая ошибка:

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

ответ

4

save signatrue является недействительным. в аргументах не должно быть request. если вы хотите, чтобы передать его используйте форму get_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 
+0

Спасибо за ваш ответ. Он дает новую ошибку __init __() получил неожиданный аргумент ключевого слова «запрос». В моем основном вопросе я добавил полный обзор. –

+0

@djpro вместо этого использует 'get_form'. См. Обновленный ответ. –

+0

Он дает 'IntegrityError at/person/create/ УНИКАЛЬНОЕ ограничение не удалось: member_person.user_id', когда я попытался отправить данные от одного и того же зарегистрированного пользователя. –

Смежные вопросы