2015-04-29 4 views
2

Я пытаюсь сделать редактируемый профиль пользователя и нашел, как добавить в него некоторые поля ... Но также мне нужно сделать редактируемые имя и фамилию, адрес электронной почты и одно поле для изменения пароля пользователя , Теперь у меня есть только пользовательские и дополнительные поля в моей форме ...Расширяет профиль пользователя в Django

Как я могу это понять?

Моя модель:

import PIL 

from django.db import models 
from django.contrib.auth.models import User 
from PIL import Image 
from django.db import models 

# Create your models here. 

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    user_phone = models.CharField(max_length=140, blank=True, null=True) 
    user_picture = models.ImageField(upload_to='users', blank=True, null=True) 
    user_balance = models.IntegerField(default=0) 

User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u) [0]) 

forms.py Мои:

from django import forms 
from userprofile.models import UserProfile 

class UserProfileForm(forms.ModelForm): 
    class Meta: 
     model = UserProfile 
     fields = ('user', 'user_phone', 'user_picture', 'user_balance') 

Мое мнение:

from django.shortcuts import render, render_to_response 
from django.shortcuts import HttpResponseRedirect, Http404 
from django.template import RequestContext 
from django.contrib.auth.decorators import login_required 
from django.core.context_processors import csrf 

# Create your views here. 
from userprofile.forms import UserProfileForm 
from userprofile.models import UserProfile 

def user_profile(request): 
    if request.method == 'POST': 
     form = UserProfileForm(request.POST, instance=request.user.profile) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/') 
    else: 
     user = request.user 
     profile = user.profile 
     form = UserProfileForm(instance=profile) 

    args = {} 
    args.update(csrf(request)) 

    args['form'] = form 

    return render_to_response('profile.html', args) 

И мой шаблон:

{% for field in form %} 
    {{ field.error }} 

{% endfor %} 

<form action="https://stackoverflow.com/users/profile/" method="POST">{% csrf_token %} 
{{ form.as_ul }} 

<input type="submit" value="Update" /> 

</form> 

ответ

0

Если вы не можете вызвать пользовательские поля из UserProfile, то вы можете создать форму для модели User

class UserForm(forms.ModelForm): 
    class Meta: 
     model = User 
     fields = ('last_name', 'email', 'password') 

Вы должны показать обе формы в вашей точки зрения тоже. Проверьте этот пример ModelForm with OneToOneField in Django Для поля пароля вам может понадобиться сделать что-то вроде этого, проверьте примеры.

https://docs.djangoproject.com/en/1.5/topics/auth/customizing/#a-full-example

+0

Это первый я попытался сделать, конечно)) Это не работает ... 'Unknown поля (ов) (user.last_name), установленного для UserProfile' И так далее для всех другие поля ... –

+0

Итак, что вам нужно сделать, так это создать вторую форму для модели User, я обновляю свой ответ, чтобы вы могли его увидеть. – lapinkoira

+0

Я не понимаю, как реализовать две формы для одного представления и сделать как на одной странице ...:/ –

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