我尝试在页面上加载空白表单(隐藏表单)并填充并显示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'。
我宁愿不通过我的第二种方法解决问题,因为它看起来很混乱,而且对其他人来说都不清楚。