2012-09-04 164 views
-3

嗨,大家好我是Django的新手。 我希望當我登錄到我的帳戶時有一個編輯按鈕,它顯示了我可以編輯的一些字段的一種形式。如何編輯用戶配置文件

我很困惑如何將數據保存到相同的用戶配置文件。

所以任何人可以告訴我怎麼是possible.Can告訴我它有一個例子

隨着我profile.html我可以看到我的個人資料和點擊編輯按鈕,我可以編輯我的個人資料

{% extends 'base.html' %} 
{% block content %} 
    <p>User_id: {{ drinker.user_id }} 
    <p>Name: {{ drinker.name }}</p> 
     <p>Birthday: {{ drinker.birthday }}</p> 
     <p>first_name: {{ user.first_name }}</p>  
     <p>Users: {{ user.username }}</p> 
    <p><a href="/edit/">Edit Profile</a> 
{% endblock %} 

編輯功能

def Edit(request): 
     if not request.user.is_authenticated(): 
      return HttpResponseRedirect('/login/') 
     drinker = request.user.get_profile() 
     context = {'drinker':drinker} 
     return render_to_response('edit.html', context, context_instance=RequestContext(request)) 

**Edit.html** 

{% extends "base.html" %} 
{% block extrahead %} 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js" type="text/javascript"></script> 
    <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/jquery-ui.min.js" type="text/javascript"></script> 
    <script> 
    $(function() { 
     $("#birth").datepicker(); 
    }); 
    </script> 
{% endblock %} 
{% block content %} 
<form action="/edit1/" method="post"> 
{% csrf_token %} 

<div class="register_div"> 
    <p><label for="name">Name:</label></p> 
    <p><input type="text" value="{{ drinker.name }}"></p> 
</div> 
<div class="register_div"> 

    <p><label for="birthday">Birthday: {{ drinker.birthday }} </label></p> 
     <p>Choose new date of birth</p> 
    <p><input type="text" value="" id="birth"></p> 
</div> 
<p><input type="submit" value="submit" /></p> 
</form> 
{% endblock %} 

在EDIT1編輯請求功能工作

def EditRequest(request): 
    #if request.method == 'POST': 
     #form = UserProfileForm(request.POST, instance=user) 

    #if request.user.is_authenticated(): 
    #return render_to_response('hgdhg') 
    if request.method == 'POST': 
     form = EditForm(request.POST) 
     if form.is_valid(): 
      user=User.objects.create_user(usere_id=form.cleaned_data['user_id']) 
     #user.save() 
      drinker=user.get_profile() 
      drinker.name=form.cleaned_data['name'] 
      drinker.birthday=form.cleaned_data['birthday'] 
      drinker.save() 
      return HttpResponseRedirect('/profile/') 
     else: 
      return HttpResponseRedirect('/f/') 
    else: 
      return render_to_response('f')#,{'form':form} , context_instance=RequestContext(request)) 

此editrequest不起作用?

+0

開始[存儲有關用戶的其他信息(https://docs.djangoproject.com/en/dev/topics/auth /#stored-additional-information-about-users) –

+0

我學過了。 但是沒有辦法給出如何編輯配置文件。它只是顯示配置文件給你。我可以看到我的配置文件,現在我想編輯一個 –

+0

所以如果你能幫助我,請做 –

回答

1

這裏有您需要執行編輯用戶的配置文件的步驟:

  1. 找出哪些用戶登錄(上user authentication讀了)
  2. 檢查,如果用戶有一個配置文件或不;使用普通的django查詢機制。
  3. 如果用戶有配置文件;使用配置文件的實例填充ModelForm(請參閱手冊中的this page
  4. 將窗體與其他任何窗體一樣顯示給最終用戶。
  5. 當用戶提交更改時,請執行常規表單驗證並將對象保存到數據庫。

下面是一些代碼,做1-4步:

from django.shortcuts import render, redirect 
from django.contrib.auth.decorators import login_required 

from myapp.models import UserProfile 
from myapp.forms import UserProfileForm 

@login_required 
def edit_profile(request): 
    try: 
     user_profile = UserProfile.objects.get(user=request.user) 
    except UserProfile.DoesNotExist: 
     # this user has no profile 
     return redirect('/error') 

    user_profile_form = UserProfileForm(instance=user_profile) 
    return render(request,'profile_edit.html',{'form':user_profile_form}) 

UserProfileForm類:

from django import forms 
from myapp.models import UserProfile 

class UserProfileForm(forms.ModelForm): 
    class Meta: 
     model = UserProfile 
+0

因爲我必須創建一個userprofile模型或我可以使用我的模型 –

+0

您可以使用任何模型,我使用'UserProfile'因爲這是[文檔](https://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users) –

+0

好的。我創建了profile.html文件,它獲得了以前的值。 但當我修改它們並點擊提交按鈕。它不會做任何事情。我認爲它需要一個功能,它將在提交按鈕 –

0

傳遞的用戶實例沿着你的模型形式

user = User.objects.get(user_name = username) 
    form = Registrationform(instance=user) 

並將此表單呈現給您的模板

+0

對不起@burhan我看不到你的回答 – user1614526

0

例子我之前做過:

@login_required        
def lexuseditform(request,userpk): 
    if Adult.objects.filter(user=request.user).exists(): 
     adult = Adult.objects.get(user=request.user) # load existing Adult 
    else: 
     adult = Adult(user=request.user) # create new Adult 
    if request.method == 'POST': # If the form has been submitted... 
     form = AdultForm(request.POST,instance=adult) # A form bound to the POST data 
     if form.is_valid(): # All validation rules pass 
      form.save() 
      redirect_url = reverse('lexusedited',kwargs={'userpk': request.user.pk}) 
      return HttpResponseRedirect(redirect_url) # Redirect after POST 
    else: 
      form = AdultForm(instance=adult) # An unbound form 
    return render(request,'lexus/lexuseditform.html', {'form': form}) 

@login_required        
def lexusedited(request,userpk): 
    return render(request,'lexus/lexusedited.html') 

希望這有助於...

+0

嗨,大家好,我的問題依然存在。 我有問題的幫助下,我給你的代碼可以得到用戶配置文件的問題是修改後的數據不會被保存。 而你們告訴的方法只是告訴如何獲取用戶數據,而沒有人告訴如何保存這些數據。 –

相關問題