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

2024-10-01 15:29:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在页面上加载一个空白表单(表单隐藏),并在用户单击jobnum按钮时填充和显示它。你知道吗

据我所知,在阅读时,我需要在呈现窗体时传递主键,但在用户单击按钮之前,我当然不能传递主键。但是我需要在页面加载时呈现表单,这样显然它就不会有与之相关联的pk,因为用户还没有单击按钮。你知道吗

我可以通过以下jquery和视图.py地址:

$('#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请求的按钮,而ajax请求会获得所需的pk。你知道吗

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

123 
{{editJobForm}} 
123

如果我转到它的url,它恰好是jobs/editjob。它正确地呈现123(实际形式)123。(但前提是我通过了一个已知的pk,而不是我眼中的一个ajaxed pk)

当我尝试{% include "editjob.html" %}时,它只包含“123”。你知道吗

我不想通过我的第二种方法来解决这个问题,因为它看起来很混乱,其他人也不清楚。你知道吗


Tags: instance用户json表单datagetrequestajax

热门问题