-3

こんにちはみんな私はDjangoに不慣れです。アカウントにログインすると、編集可能ないくつかのフィールドのフォームを表示する編集ボタンが表示されるようにしたいと思います。

データが同じユーザープロファイルに保存される方法がわかりません。

それで、誰もがそれがどのように可能であるかを私に言うことができます.1つの例でそれを私に示すことができます

私の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は機能しませんか?

4

3 に答える 3

1

ユーザーのプロファイルを編集するために実行する必要のある手順は次のとおりです。

  1. ログインしているユーザーを確認します(ユーザー認証について調べます)
  2. ユーザーがプロファイルを持っているかどうかを確認します。そのためには、通常のdjangoクエリメカニズムを使用します。
  3. ユーザーがプロファイルを持っている場合。ModelFormにプロファイルのインスタンスを入力します(マニュアルのこのページを参照してください)
  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
于 2012-09-04T07:36:11.873 に答える
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')

お役に立てれば...

于 2012-09-04T08:02:06.697 に答える
0

モデルフォームに沿ってユーザーのインスタンスを渡します

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

このフォームをテンプレートにレンダリングします

于 2012-09-04T07:39:43.090 に答える