Это мой второй пост на SO, а также мой второй пост на Django - будьте осторожны.
Я работаю на простой модели пользователя. Пользователи должны иметь возможность зарегистрироваться на сайте, и после регистрации они должны иметь возможность изменять настройки своей учетной записи при входе в систему. Однако если я сделаю следующее, пользователи увидят огромную форму со всеми видами информации, которую я не хочу, чтобы они редактировали:
from django.shortcuts import render_to_response, get_object_or_404
from django.core import urlresolvers
from django.http import HttpResponseRedirect
from django.template import RequestContext
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import UserChangeForm
@login_required
def settings( request, template_name = 'accounts/settings.html' ):
"""
Processes requests for the settings page, where users
can edit their profiles.
"""
page_title = 'Account Settings'
if request.method == 'POST':
postdata = request.POST.copy()
form = UserChangeForm( postdata )
if form.is_valid():
form.save()
else:
form = UserChangeForm()
title = 'Settings'
return render_to_response( template_name, locals(), context_instance = RequestContext( request) )
Как будто этого было недостаточно, эта форма не разрешить внесение любых изменений, указав в качестве ошибки «Пользователь с таким именем пользователя уже существует». Это меня сбивает с толку - я пытаюсь сохранить UserChangeForm, так неужели она уже существует?
Я уже некоторое время искал в Интернете, пытаясь создать свои собственные пользовательские формы, на основе других вопросов , которые я видел на SO, например:
class CustomUserChangeForm( UserChangeForm ):
def __init__( self, *args, **kwargs ):
super( CustomUserChangeForm, self ).__init__( *args, **kwargs )
if self.instance and self.instance.pk:
# Since the pk is set this is not a new instance
self.fields['username'] = self.instance.username
self.fields['username'].widgets.attrs['readonly'] = True
К сожалению, это не сработало. Я как бы не понимаю, что делать, поэтому любая помощь будет принята с благодарностью. Ниже приведены мои urls.py и шаблон:
urlpatterns = patterns('appname.accounts.views',
url(r'^settings/$', 'settings', {
'template_name': 'accounts/settings.html'
}, 'settings'
),
)
{% extends "accounts/base.html" %}
{% block main %}
Welcome, {{ request.user.pk }}{{ request.user.username }} to accounts.templates.accounts.settings.html.
Here you can update your user settings. You can change your password here.
{% endblock %}
Заранее благодарим за любую помощь!