Это мой второй пост на SO, а также мой второй пост на Django - будьте осторожны.
Я работаю над простой моделью пользователя.Пользователи должны иметь возможность зарегистрироваться на сайте, и после регистрации они должны иметь возможность изменять настройки своей учетной записи при входе в систему.Однако, если я сделаю следующее, пользователи увидят огромную форму со всеми видами информации, которую я не хочу, чтобы они редактировали:
views.py
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, вот так:
forms.py
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 и шаблон:
urls.py
urlpatterns = patterns('appname.accounts.views',
url(r'^settings/$', 'settings', {
'template_name': 'accounts/settings.html'
}, 'settings'
),
)
template
{% extends "accounts/base.html" %}
{% block main %}
<h1>Welcome, {{ request.user.pk }}{{ request.user.username }} to accounts.templates.accounts.settings.html.</h1>
<h2>Here you can update your user settings. You can change your password <a href="{% url change_password %}">here</a>.</h2>
<form action="." method="post" accept-charset="utf-8">
{% csrf_token %}
{{ form.as_p }}
<p><input type="submit" value="Update →"></p>
</form>
{% endblock %}
Заранее благодарен за любую помощь!