2

ユーザーが「プロファイル/編集/」リンクをクリックすると、テンプレートが読み込まれます。

しかし、レコードが既に存在する場合は、テンプレートのフィールドに事前入力したいと思います。

これを試しましたが、うまくいかないようです。

def editprofile(request):
    if request.user.is_authenticated():
        try:
            userprofile = UserProfiles.objects.get(user=request.user)
            form = UserProfileForm(request.POST, instance=userprofile)
        except UserProfiles.DoesNotExist:
            userprofile = None
        if userprofile:
            return render_to_response('profile_edit.html', {'form':form}, context_instance=RequestContext(request))
        else:
            return render_to_response('profile_edit.html', {'form':UserProfileForm()}, context_instance=RequestContext(request))
4

2 に答える 2

2

dict とインスタンスの両方を同時に使用してフォームを初期化できないため、コードは機能しません ( form = UserProfileForm(request.POST, instance=userprofile))。インスタンスをオーバーライドする初期値のみを指定できます。

代わりにこれを試してください:

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

@login_required
def editprofile(request):
    try:
       userprofile = UserProfiles.objects.get(user=request.user)
    except UserProfiles.DoesNotExist:
       return render(request, 'profile_edit.html', {'form':UserProfileForm()})
    form = UserProfileForm(instance=userprofile)
    return render(request, 'profile_edit.html', {'form':form})
于 2012-04-27T10:39:15.657 に答える
0

クラスベースのビューを使用し、ログインが必要なディスパッチ メソッドを次のようにラップします。

class ProfileView(TemplateView, ProcessFormView):

    template_name = "profile.html"

def post(self, request, *args, **kwargs):
    context = self.get_context_data()
    # Validate the form
    form = ProfileForm(request.POST, request.FILES)
    if form.is_valid():
        profile = get_object_or_404(UserProfile, user=request.user)
        if form.cleaned_data['avatar']:
            profile.avatar = form.cleaned_data['avatar']
        profile.bio = form.cleaned_data['bio']
        profile.save()

        context['form'] = ProfileForm(initial={'bio':UserProfile.objects.get(user=request.user).bio})

        # Add message
        messages.add_message(request, messages.SUCCESS, _(u"Profile saved."))

    else:
        # Add message
        messages.add_message(request, messages.ERROR, _(u"Something went wrong..."))

        context['form'] = form
    return self.render_to_response(context)

def get(self, request, *args, **kwargs):
    context = self.get_context_data()
    context['form'] = ProfileForm(initial={'bio':UserProfile.objects.get(user=request.user).bio})
    return self.render_to_response(context)

def get_context_data(self, **kwargs):
    context = super(ProfileView, self).get_context_data(**kwargs)
    context['title'] = 'profile'
    return context

@method_decorator(login_required(login_url='/'))
def dispatch(self, *args, **kwargs):
    return super(ProfileView, self).dispatch(*args, **kwargs)
于 2012-04-27T07:55:55.730 に答える