2012-09-04 109 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

嗨,大家好,我的问题依然存在。 我有问题的帮助下,我给你的代码可以得到用户配置文件的问题是修改后的数据不会被保存。 而你们告诉的方法只是告诉如何获取用户数据,而没有人告诉如何保存这些数据。 –

相关问题