0

ビュー.py

def save_report(request):
    form = ReporterRegisterForm()
    profileform = ProfilecontactForm()
    user = request.user
    userprofile = UserProfile.objects.get(user=user)
    if request.method == 'POST':        
        id = request.POST.get('id')
        user = User.objects.get(pk=id)        
        userprofile = UserProfile.objects.get(user=user.id)
        form = ReporterRegisterForm(request.POST, instance=user) 
        profileform = ProfilecontactForm(request.POST,instance = userprofile)
        if form.is_valid() and profileform.is_valid(): 
            form.save()
            profilesave = profileform.save(commit=False)            
            profilesave.save()
    return render(request, 'setting/edit_reporter.html',
                   {'form': form,
                     'userprofile':userprofile
                    })

urls.py

urlpatterns = patterns(
    'setting.views',
    (r'^$', 'index'),      
    (r'^save-reporter/$', 'save_reporter'),)

js:

$('.reporter').click(function () {       
        alert(1)     
        var id = $(this).attr('id');  
        var csrf_token = $("#csrf_token").val();
        $.ajax({ 
           data:{
                csrfmiddlewaretoken: ('{{csrf_token}}'),   
               // form:form.serialize(),            
                id:id,

                },
        type:'POST',
        url: '/setting/save-reporter/',
        success: function() {
            $('#authorisedreporter').show();
        }
      });
     });

html:

<button type="button" id="{{ list.0.id }}" class="openDiv">{{list.0.name}} </button>

{{ list.0.id }} リストの ID はユーザー テーブルの ID です

これは、フォーム データを更新するための私の views.py です。フォーム データをインスタンス化したいのですが、更新モードでフィールドを表示する必要があります。インスタンス化されていません。POST から正しい ID を取得しています。ヘルプが必要です

4

2 に答える 2

0

だからここに私がそれをする方法があります:

これを html テンプレートに含めます (必要に応じて、display: none で非表示にします)。my_id は、何らかの方法で渡す必要があるコンテキスト変数です。

<div id="save-url" rel="{% url "save_reporter" pk=my_id %}" ></div>

次に、ajax 呼び出しで URL を取得できます。

$.ajax({
   type: 'GET',
   url: $('#save-url').attr('rel'),
...

URL は次のようになります。

url(r'^save-reporter/(?P<pk>\d+)/$', myapp.views.save_report, name='save_report'), 

そして、あなたの見解は次のようになります:

views.py def save_report(request, pk):
     user = User.objects.get(id=pk)

pk は、ajax 呼び出しから渡されたユーザー ID です。ちなみに投稿したURLはsave_reporterを指しており、関数はsave_reportと呼ばれています。

PS問題はありませんが、質問をできるだけ明確に定式化し、関連情報を含めるには、もう少し時間がかかる必要があります.

編集:ガッチャ。それは興味深い。あなたが持っているものでIDにアクセスできると思っていたでしょうが、試すことができます

id = request.POST['id']

いずれにせよ、それは非常に「Django」のやり方ではありません。URLにIDを含める必要があります(上記の私の答えを参照してください)。

于 2013-08-08T14:10:36.007 に答える
0

フォームにrequest.user. 他のユーザーに入力する場合は、URL から ID を取得し、それを取得する必要がありuserますuserprofile

したがって、ビューは次のように更新できます

def save_report(request):
    user = request.user
    userprofile = UserProfile.objects.get(user=user)
    form = ReporterRegisterForm(instance=user)
    profileform = ProfilecontactForm(instance=userprofile)

    if request.method == 'POST':        
        form = ReporterRegisterForm(request.POST, instance=user) 
        profileform = ProfilecontactForm(request.POST,instance = userprofile)
        if form.is_valid() and profileform.is_valid(): 
            form.save()
            profilesave = profileform.save(commit=False)            
            profilesave.save()
    return render(request, 'setting/edit_reporter.html',
                   {'form': form,
                     'userprofile':userprofile
                    })
于 2013-08-08T12:10:09.713 に答える