私はajaxと2つのビューを使用しています。リダイレクトをうまく処理する方法がわからないことを除いて、すべてうまく動作します。明らかに、フォームを1ページに2回、別のページに2回レンダリングすることは冗長です。ユーザーをリダイレクトせずにモデルを更新するにはどうすればよいですか?2つのビューとajaxでモデルフォーム経由でモデルを更新するときのリダイレクトの処理
forms.py
class RecruitForm(forms.ModelForm):
jobnum = forms.ModelChoiceField(queryset=Job.objects.all())
class Meta:
model = Job
fields = ['jobnum','rec_count']
view.py
def recruiting(request):
if request.method == 'POST':
recruit_form = RecruitForm(request.POST or None)
if recruit_form.is_valid():
t = Job.objects.get(jobnum=recruit_form.cleaned_data.get('jobnum'))
t.jobnum = recruit_form.cleaned_data.get('jobnum')
t.rec_count = recruit_form.cleaned_data.get('rec_count')
t.save()
def edit(request): #testing
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']
j = Job.objects.get(pk=a)
form = RecruitForm(request.POST or None ,instance=j)
instance = form.save(commit=False)
instance.save()
return render(request, "editrec.html", {"form":form})
javascript.jsを
$('.row2').click(function(){
var a = $(this).data('jobnum')
$.ajax({
url: "/edit/",
data: {'jobnum':a},
success: function(data) {
console.log(data)
$(".divtest").html(data);
document.getElementById('editform').action='../edit/?jobnum=' + encodeURIComponent(a);
},
});
});
urls.py
url(r'^edit/$','SiteTwo.views.edit', name='edit'), #testing
editrec.html
{% load staticfiles %}
{% load crispy_forms_tags %}
{% block content %}
<form method='POST' id='editform' action = '' class='givemewhite'>{% csrf_token %}
{{form|crispy}}
<button class = 'btn btn-default' name='edit'/>Submit</button>
</form>
{% endblock %}
forms.py
class RecruitForm(forms.ModelForm):
jobnum = forms.ModelChoiceField(queryset=Job.objects.all())
class Meta:
model = Job
fields = ['rec_count']
'something'部分はどのように機能しますか? djangoは 'modelchoicefield'でどのジョブ番号を選択したのでしょうか? –
「何か」は、ページが読み込まれる前にシステムによって提供され、ユーザーによっては提供されません。あなたは仕事関連の詳細とその特定の仕事の選択を同じページで変更しようとしていますか? – RA123
はい、すべてのジョブオプションを含むページに既にロードされているフォームがあります。ユーザーは更新するジョブを選択してから更新します。 –