2

設定フォームページがあります。ユーザーがフォームに一度入力した場合。それらの値を表示する必要があります。しかし、[初めて]データがない場合、クエリエラーが発生します。フォーム データは [ログインしている] 現在のユーザーに関連付けて記述する必要があるため、そのクエリが必要です。

ここに私のビュー部分があります:

@login_required(login_url='/login/')
def profile_page(request,username):
    query = Profile.objects.get(owner__username = username) ##error!
    if request.method == 'POST':
        form = profile_form(request.POST,instance=query)
        form.save()
        return HttpResponseRedirect('/admin/')
    else:
        form = profile_form(instance=query)


    return render_to_response('profile_save.html',{'form':form},context_instance = RequestContext(request))

モデルを確認する必要があると思います。空の場合は、別のことを行う必要があります。

ハマった。

ありがとうございました

4

3 に答える 3

4

.exists()クエリセットオプションを利用したい

@login_required(login_url='/login/')
def profile_page(request,username):
    form = profile_form()
    if Profile.objects.get(owner__username = username).exists():
        query = Profile.objects.get(owner__username = username)
        if request.method == 'POST':
            form = profile_form(request.POST,instance=query)
            form.save()
            return HttpResponseRedirect('/admin/')
        else:
            form = profile_form(instance=query)

    return render_to_response('profile_save.html',{'form':form},context_instance = RequestContext(request))

詳細については、 QuerytSetAPIリファレンスを参照してください。

于 2012-09-22T13:22:14.000 に答える
0

getこのように、そのクエリをラップしてtry ... exceptインスタンスをnoneに設定する必要があります。

from django.core.exceptions import ObjectDoesNotExist
@login_required(login_url='/login/')
def profile_page(request,username):
    try:
        query = Profile.objects.get(owner__username = username)

    #to be more specific you can except ProfileObjectDoesNotExist
    except ObjectDoesNotExist: 
        query = None  #Doesn't exist, set to None

    if request.method == 'POST':
        form = profile_form(request.POST,instance=query)
        form.save()
        return HttpResponseRedirect('/admin/')
    else:
        form = profile_form(instance=query)

    return render_to_response('profile_save.html',{'form':form},
                              context_instance = RequestContext(request))
于 2012-09-22T13:23:05.223 に答える
0

この目的で get_or_create を使用した可能性があると思います。

Profile.objects.get_or_create(owner__username = username)
于 2012-09-22T16:00:30.190 に答える