Задать вопрос
  • Как правильно передать строки в функцию?

    @nurzhannogerbek Автор вопроса
    Stalker_RED, работает не совсем корректно к сожалению. Объясню ситуацию. К примеру в форме создания пользователя. Как вы видите у меня форма находится в модальном окне. К примеру, когда форма валидная if (data.form_is_valid) хочу обновлять список пользовалей (#users), показывать сообщение в блоке (#user-action-message) и затем уже закрыть модальное окно. Все это делается по url http://127.0.0.1:8000/user/. При нажатии кнопки отправки формы меня перебрасывает на url http://127.0.0.1:8000/user/create/ и показывается JSON. JSON к слову верный. Надеюсь я смог объяснить странную ситуацию. Есть ли у вас идеи как исправить эту проблему?
  • Как правильно передать строки в функцию?

    @nurzhannogerbek Автор вопроса
    Stalker_RED, console.log(this); выводит тоже самое, что описывал выше в комментарии.
  • Как правильно передать строки в функцию?

    @nurzhannogerbek Автор вопроса
    console.log(form[0]); в консолях выводит:
    Firefox выводит:
    Window → http://127.0.0.1:8000/user/
    Chrome выводит:
    Window {frames: Window, postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, …}


    Есть предположение что не находит формы. Что думаете?
  • Как правильно передать строки в функцию?

    @nurzhannogerbek Автор вопроса
    console.log(form[0]); в консолях выводит:
    Firefox выводит:
    Window → http://127.0.0.1:8000/user/
    Chrome выводит:
    Window {frames: Window, postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, …}


    Есть предположение что не находит формы. Что думаете?
  • Как изменять пароль пользователя в Django?

    @nurzhannogerbek Автор вопроса
    Xaip, добавил этот код, выводится ошибки из коробки Django кроме одной. Не выводится ошибка, когда пароль пользователя схож его персональными данными. К примеру пароль такой же как и username пользователя. Есть ли у вас идеи по этому поводу?

    from django.contrib.auth.password_validation import validate_password
    
    def clean_new_password(self):
        password = self.cleaned_data.get('new_password')
        validate_password(password)
        return password
  • Как изменять пароль пользователя в Django?

    @nurzhannogerbek Автор вопроса
    Xaip, Если добавить в форму поле для пароля как вы и сказали, то как привязать в таком случаи валидацию из коробки Django, которая применяется для поля пароль? К примеру те, которые настроены в django/contrib/auth/password_validation.py.

    class UserPasswordChangeForm(forms.Form):
        new_password = forms.CharField(
            widget=forms.PasswordInput(
                attrs={
                    "class": "form-control",
                    "id": "new_password",
                }
            ),
            label=_("New password"),
            required=True,
        )
  • Как изменять пароль пользователя в Django?

    @nurzhannogerbek Автор вопроса
    Pavel Denisov, а как тогда должен был выглядеть правильный CBV для моей вьюшки на ваш взгляд? Подскажите пожалуйста, смотреть методы в django/views/generic/edit.py?
  • Как изменять пароль пользователя в Django?

    @nurzhannogerbek Автор вопроса
    Pavel Denisov, forms.py теперь выглядит так (см. ниже):

    forms.py:
    class UserPasswordChangeForm(SetPasswordForm):
        class Meta:
            model = User
            fields = ('new_password1', 'new_password2',)
    
        def __init__(self, user, *args, **kwargs):
            self.user = user
            super(UserPasswordChangeForm, self).__init__(user, *args, **kwargs)


    Добавил user в __init__, но проблему это не решило. При отправки формы срабатывает та же ошибка, что описывал выше в комментарии.
  • Как изменять пароль пользователя в Django?

    @nurzhannogerbek Автор вопроса
    Xaip, Тоже вариант, не спорю, но я решил использовать форму SetPasswordForm. Можете пожалуйста взглянуть на комментарий выше. Я там расписал о своей текущей проблеме. Что думаете по этому поводу?
  • Как изменять пароль пользователя в Django?

    @nurzhannogerbek Автор вопроса
    Pavel Denisov, я ознакомился с данной статьей до этого, но счел верным использовать форму, которая наследуется от SetPasswordForm. Проблема у меня следующая: Есть модальное окно с формой. Сама форма открывается (срабатывает метод get) корректно, но при отправки формы (submit) срабатывает ошибка (см. ниже). Какой аргумент не хватает при POST запросе можете подсказать?

    forms.py:
    from django import forms
    from django.contrib.auth.models import User
    from django.contrib.auth.forms import SetPasswordForm
    
    class UserPasswordChangeForm(SetPasswordForm):
        class Meta:
            model = User
            fields = ('new_password1', 'new_password2',)
    
        def __init__(self, *args, **kwargs):
            super(UserPasswordChangeForm, self).__init__(*args, **kwargs)
            self.fields['new_password1'].widget.attrs = {'class': 'form-control','id': 'new_password1',}
            self.fields['new_password2'].widget.attrs = {'class': 'form-control', 'id': 'new_password2',}


    views.py:
    class UserPasswordChangeView(UpdateView):
        template_name = "users/password_change.html"
        form_class = UserPasswordChangeForm
        model = User
    
        def get(self, request, *args, **kwargs):
            profile = Profile.objects.get(pk=self.kwargs['pk'])
            context = {
                'user': profile.user,
                'user_password_change_form': UserPasswordChangeForm(user=profile.user),
            }
            data = dict()
            data['html_user_password_change_form'] = render_to_string(
                'users/password_change.html', context, request=request
            )
            return JsonResponse(data)
    
        def form_valid(self, form):
            form.save()
            data = dict()
            data['form_is_valid'] = True
            context = {'profiles': Profile.objects.all()}
            data['html_users'] = render_to_string('users/users.html', context)
            return JsonResponse(data)


    ERROR:
    Time: [06/Nov/2017 04:40:26] | LevelName: ERROR | Module: exception | Process: 1146 | Thread: 123145551802368 | Message: Internal Server Error: /user/50/password_change/
    Traceback (most recent call last):
      File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner
        response = get_response(request)
      File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response
        response = self.process_exception_by_middleware(e, request)
      File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response
        response = wrapped_callback(request, *callback_args, **callback_kwargs)
      File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/views/generic/base.py", line 68, in view
        return self.dispatch(request, *args, **kwargs)
      File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/views/generic/base.py", line 88, in dispatch
        return handler(request, *args, **kwargs)
      File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/views/generic/edit.py", line 240, in post
        return super(BaseUpdateView, self).post(request, *args, **kwargs)
      File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/views/generic/edit.py", line 181, in post
        form = self.get_form()
      File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/views/generic/edit.py", line 45, in get_form
        return form_class(**self.get_form_kwargs())
      File "/Applications/Projects/web/dashboard.kase.kz/users/forms.py", line 117, in __init__
        super(UserPasswordChangeForm, self).__init__(*args, **kwargs)
    TypeError: __init__() takes at least 2 arguments (1 given)
  • Как изменять пароль пользователя в Django?

    @nurzhannogerbek Автор вопроса
    Сергей Горностаев, не совсем понял вас. Я и есть тот кто делает данную страницу для суперпользователей и я не знаю как осуществить сброс паролей :( Возможно вы имеете введу, что суперпользователь может поменять лишь свой собственный пароль?
  • Как изменять пароль пользователя в Django?

    @nurzhannogerbek Автор вопроса
    Сергей Горностаев, в проекте не используется админка из коробки. Такое вот требование, если не вдаваться во все детали. Используется собственная страница для суперпользователей.
  • Редактирование пользовательских данных | Django?

    @nurzhannogerbek Автор вопроса
    Pavel Denisov, Я вас понял теперь. В шаблон передал пользователя context = {'user': profile.user,}, затем уже в шаблоне указал id пользователя. Тоже сработало. Cпасибо вам большое! Могли бы вы еще раз скомпоновать все ваши комментарии в один ответ, чтобы я его отметил как ответ.
  • Редактирование пользовательских данных | Django?

    @nurzhannogerbek Автор вопроса
    Pavel Denisov, получается редактирую данные из модели User. Получить id пользователя по id профиля я получу, к примеру так:
    profile = Profile.objects.get(pk=self.kwargs['pk'])
    print profile.user.id


    А что дальше то? Как сохранить дальше?
  • Редактирование пользовательских данных | Django?

    @nurzhannogerbek Автор вопроса
    Pavel Denisov, при клике по одному из профилей в списке, по url я получаю id профиля, поэтому и шагал от профиля. Как бы вы реализовали это к примеру?
  • Редактирование пользовательских данных | Django?

    @nurzhannogerbek Автор вопроса
    Pavel Denisov, Сейчас все работает, но как-то громоздко вышло. Вы подсказали =) В посте я постарался объяснить суть модели данных Profile. Если в двух словах, то суперпользователь может сортировать перетаскиваем список пользователей (профилей в моем случаи). При следующем открытии страницы список будет отсортирован в той последовательности, в которой был последний раз отсортирован. Сортировка происходит по полю idx. Ну и в будущем возможно будут необходимы другие личные данные пользователей и модель Profile будет расширен.
  • Редактирование пользовательских данных | Django?

    @nurzhannogerbek Автор вопроса
    Pavel Denisov, как вы посоветовали заменил на model = Profile. Затем дописал метод form_valid следующим образом. Получилось громоздко, как вы думаете лучше перенести сохранения в метод save в файл forms.py?

    def form_valid(self, form):
            profile = form.save(commit=False)
            profile.user.username = form.cleaned_data['username']
            profile.user.first_name = form.cleaned_data['first_name']
            profile.user.last_name = form.cleaned_data['last_name']
            profile.user.email = form.cleaned_data['email']
            profile.user.password = form.cleaned_data['password']
            profile.user.groups = form.cleaned_data['groups']
            profile.user.user_permissions = form.cleaned_data['user_permissions']
            profile.user.is_staff = form.cleaned_data['is_staff']
            profile.user.is_active = form.cleaned_data['is_active']
            profile.user.is_superuser = form.cleaned_data['is_superuser']
            profile.user.last_login = form.cleaned_data['last_login']
            profile.user.date_joined = form.cleaned_data['date_joined']
            profile.user.save()
            profile.save()
            data = dict()
            data['form_is_valid'] = True
            context = {'users': Profile.objects.all()}
            data['html_users'] = render_to_string('users/users.html', context)
            return JsonResponse(data)
  • Редактирование пользовательских данных | Django?

    @nurzhannogerbek Автор вопроса
    Pavel Denisov, urls.py выглядит следующим образом. Полагаю что url правильный, в противном случаи не заработал бы даже get метод. К слову вот и само сообщение о GET:
    LevelName: INFO | Module: basehttp | Process: 806 | Thread: 123145429389312 | Message: "GET /user/31/edit/ HTTP/1.1" 200 9329


    urls.py:
    url(r'^(?P<pk>\d+)/edit/$', UserEditView.as_view(), name='user_edit'),


    31 в данном случаи id профиля. Как я уже упоминал ранее выводится список профилей. По id профиля далее я получаю данные пользователя (поле user OneToOneField) и вывожу эти данные в форму:
    profile = Profile.objects.get(pk=self.kwargs['pk'])
    user_edit_form = UserForm(instance=profile.user)


    Вопрос как теперь все правильно сохранить. Видимо мой form_valid метод некорректный.
  • Редактирование пользовательских данных | Django?

    @nurzhannogerbek Автор вопроса
    Pavel Denisov, Здравствуйте! Если честно запутался. Вроде должен срабатывать метод form_valid вьюшки UserEditView. Разве нет? Мне кажется я не правильно пытаюсь сохранить данные.
  • Проблемы с взаимодействием Django приложения и Oracle?

    @nurzhannogerbek Автор вопроса
    Евгений Комаров, Cпасибо большое за пояснения! =)