Отредактируйте пользователя django.auth через ModelForm - PullRequest
0 голосов
/ 04 декабря 2011

Я пытаюсь создать простую форму «редактирования профиля», используя модель django.contrib.auth.models.User через ModelForm. Вот что у меня сейчас:

Форма:

class UserEditForm(ModelForm):
    class meta:
        model = User

    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        super(UserEditForm, self).__init__(*args, **kwargs)

Вид:

def edit_user(request, user):
    user = get_object_or_404(User, username__exact = user)

    form = UserEditForm(request.POST or None, request=request, instance=user)

    return render_to_response('forms.html', add_csrf(request, form=form, title='Edit User'), context_instance=RequestContext(request))

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

1 Ответ

1 голос
/ 05 декабря 2011

Django уже предоставляет вам вспомогательные формы для этого; в документации .

.

Если вы все еще хотите использовать свой собственный, вам следует помнить, что зарегистрированный пользователь уже является частью запроса, поэтому вы можете упростить свое представление. Поскольку вы уже используете RequestContext, вам не нужно ничего делать для добавления кода CSRF - если промежуточное программное обеспечение CSRF находится в ваших настройках (как указано U-DON).

from django.contrib.auth.decorators import login_required

@login_required
def edit(request)
   # This body will only run if the user is logged in
   # and the current logged in user will be in request.user

   edit_form = UserEditForm(instance=request.user)
   return render_to_response('forms.html',
                             {'form':edit_form},
                             context_instance=RequestContext(request))
...