2015-04-29 79 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

如果您不能調用從用戶配置的用戶字段,那麼你可以爲用戶模型

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

這是第一次我試圖做的,當然))這不工作...的UserProfile' 指定 '未知領域(S)(user.last_name)等所有其他領域... –

+0

好的,那麼,你需要做的是爲模型用戶創建第二個表單,我更新我的答案,以便你可以看到它。 – lapinkoira

+0

我不明白,如何實現兩個窗體到一個視圖,並在一個頁面上呈現兩個...:/ –