私はユーザーがオブジェクトの追加/編集/削除を可能にするビュー機能を持っています。次の機能はどのように見え、どのように改善することができますか?関数の各部を別々の部分に分けることを考えていましたが、「コンポーネント」はコードの4行5行以上ではないので、少し過度のことになると思いました。ビューの追加/編集の評価
@login_required
def edit_education(request, edit=0):
profile = request.user.get_profile()
education = profile.education_set.order_by('-class_year')
form = EducationForm(data=request.POST or None, request=request)
if request.method == 'POST':
##### to add a new school entry ######
if 'add_school' in request.POST:
if form.is_valid():
new_education = form.save(commit=False)
new_education.user = profile
new_education.save()
return redirect('edit_education')
##### to delete a school entry #####
for education_id in [key[7:] for key, value in request.POST.iteritems() if key.startswith('delete')]:
Education.objects.get(id=education_id).delete()
return redirect('edit_education')
###### to edit a school entry -- essentially, re-renders the page passing an "edit" variable #####
for education_id in [key[5:] for key, value in request.POST.iteritems() if key.startswith('edit')]:
edit = 1
school_object = Education.objects.get(id = education_id)
form = EducationForm(instance = school_object, request=request)
return render(request, 'userprofile/edit_education.html',
{'form': form,
'education':education,
'edit': 1,
'education_id': education_id}
)
##### to save changes after you edit a previously-added school entry ######
if 'save_changes' in request.POST:
instance = Education.objects.get(id=request.POST['education_id'])
form = EducationForm(data = request.POST, instance=instance, request=request, edit=1)
if form.is_valid():
form.save()
return redirect('edit_education')
return render(request, 'userprofile/edit_education.html', {'form': form, 'education': education})
そして、私のテンプレートでは、このヘルプが何かを明確にする場合:
{% for education in education %}
<p><b>{{ education.school }}</b> {% if education.class_year %}{{ education.class_year|shorten_year}}, {% endif %} {{ education.degree}}
<input type="submit" name="edit_{{education.id}}" value='Edit' />
<input type="submit" name="delete_{{education.id}}" value="Delete" />
</p>
{% endfor %}
はありがとうを。
私は、ピストンまたはジャンゴ・静止framworkを使用して、AJAXを経由して多くの変更をすべてこれを行うだろうが、あなたはあなたのページ – sacabuche