如何通过将更新模型的ajax填充表单?

时间:2015-12-17 20:29:52

标签: jquery python ajax django

我尝试在页面上加载空白表单(隐藏表单)并填充并显示iff用户单击jobnum按钮。

据我所知,在阅读时我需要在渲染表单时传递主键,但当然在用户单击按钮之前我无法传递主键。但我需要在页面加载时呈现表单,所以显然它已经没有与之关联的pk,因为用户还没有点击该按钮。

我可以通过以下jquery和view.py传递我的信息来获取pk:

$('#editjob').click(function(){
    var a = document.getElementById('jobNum').textContent
    $.ajax({
    url: "editjob",
    data: {'jobnum':a},
    success: function(data) {
        alert(data);
        // $(".mydiv").append(data);
    },
    });
});


def editjob(request):
  if request.is_ajax():
    jobnum = request.GET.get('jobnum')
    job_list = Job.objects.filter(jobnum=jobnum)
    json_data = serializers.serialize('json', job_list)
    a = json.loads(json_data)
    a = a[0]['pk'] #that's our pk!
  return JsonResponse(a,safe=False)

这只是用pk警告我。

然后我想我需要做这样的事情:

  j = Job.objects.get(pk=a)     
  editJobForm = JobForm(request.POST or None, prefix='edit',instance=j)
  if editJobForm.is_valid():
        frm_jobnum = editJobForm.cleaned_data.get("jobnum")
        frm_pm = editJobForm.cleaned_data.get("pm")
        # other clean data's redacted
        instance = editJobForm.save()
        instance.save()

然后问题当然是我不能通过' editJobForm'进入上下文然后在我的主页上呈现它,因为当页面首次加载时,用户不会点击触发ajax请求的按钮,该请求获得必要的pk。

我尝试的另一种尝试是将表单呈现在其自己的页面editjob.html中,然后将其包含在我的主页面中。在那个文件中,我保存了:

123 
{{editJobForm}} 
123

如果我去了它的网址,那恰好是,jobs / editjob。它正确呈现123(实际形式)123。(但只有在我看来我传递了一个已知的pk而不是一个ajaxed pk)

当我尝试{% include "editjob.html" %}时,它只包含' 123 123'。

我宁愿不通过我的第二种方法解决问题,因为它看起来很混乱,而且对其他人来说都不清楚。

0 个答案:

没有答案