2015-01-14 3 views
0

Я написал модель для пользовательских пользователей и просмотров, которые позволяют мне добавлять новых пользователей, просматривать их информацию о профиле и логин/выход. Однако при написании представления для моих пользователей, чтобы обновить их информацию о профиле, я обнаружил, что отображаемая форма требует, чтобы пользователь снова заполнил все свои данные, даже если они не хотели изменять эту конкретную деталь. Например, если пользователь хотел просто изменить свою фамилию, им придется снова и снова вводить свой адрес электронной почты, пароль, имя и т. Д. Есть ли способ для меня, чтобы эта форма была заполнена автоматически, и пользователь может просто изменить то, что им нужно? Приведенные ниже формы и виды представлений. Любая помощь очень ценится!Создание формы изменения формы Django Autofill

views.py

@login_required(login_url='/login/') 
def personal(request): 
    """ 
    Personal data of the user profile 
    """ 
    profile = MyUser.get_full_name #This returns the email address 

    if request.method == "POST": 
     form = ProfileForm(request.POST, instance=profile) 
     if form.is_valid(): 
      form.save() 
      messages.add_message(request, messages.INFO, _("Your profile information has been updated successfully.")) 

    else: 
     form = ProfileForm 

    template = "update_profile.html" 
    data = { 'section': 'personal', 'form': form, } 
    return render_to_response(template, data, context_instance=RequestContext(request)) 

forms.py

class ProfileForm(forms.ModelForm): 
    """ 
    Profile Form. Composed by all the Profile model fields. 
    """ 
    class Meta: 
     model = MyUser 
     exclude = ('is_active', 'is_admin', 'last_login') 

Ошибка после внедрения Решение

Environment: 


Request Method: GET 
Request URL: http://localhost:8000/friends/update/ 

Django Version: 1.6.5 
Python Version: 2.7.7 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'friends') 
Installed Middleware: 
('django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware') 


Traceback: 
File "D:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response 
    112.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "D:\Python27\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view 
    22.     return view_func(request, *args, **kwargs) 
File "D:\Uni\_Project\friend_finder_V2\mysite\friends\views.py" in personal 
    85.   form = ProfileForm(instance=profile) 
File "D:\Python27\lib\site-packages\django\forms\models.py" in __init__ 
    315.    object_data = model_to_dict(instance, opts.fields, opts.exclude) 
File "D:\Python27\lib\site-packages\django\forms\models.py" in model_to_dict 
    124.  opts = instance._meta 

Exception Type: AttributeError at /friends/update/ 
Exception Value: 'function' object has no attribute '_meta' 

ответ

0

Вы можете использовать instance kwarg, чтобы передать текущий профиль в вашу форму также в GET (я вижу, что вы уже передаете его на POST). Кроме того, не забудьте сделать перенаправление HTTP после внесения изменений в вашу базу данных с помощью POST. Что-то вроде этого:

 
    form = ProfileForm(request.POST, instance=profile) 
if request.method == 'POST: 
    if form.is_valid(): 
     form.save() 
     messages.add_message(request, messages.INFO, _("Your profile information has been updated successfully.")) 
     # TODO You need to do a redirect here 
else: 
     form = ProfileForm(instance=profile) 
+0

После того как я дал это, я получаю сообщение об ошибке: «Объект« функции »не имеет атрибута« _meta ». Любая идея о решении этого? – MrW

+0

Обновите свое исходное сообщение с полной степенью. Кажется, что django ожидает объект, и вы передаете функцию ... – Serafeim

+0

Теперь обновили проблему, похоже, возникла из строки: profile = MyUser.get_full_name. Я думаю. – MrW

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