일반보기를 사용하면 훨씬 짧은 코드를 작성할 수 있습니다.
비교 :
from django.http import HttpResponse, HttpResponseRedirect, Http404
from django.shortcuts import render_to_response, get_object_or_404, redirect
from myapp.models import Context
def edit(request, item_id):
object = get_object_or_404(Context, pk=item_id)
if request.method == 'POST':
form = ContextForm(request.POST, instance=object)
if form.is_valid():
form.save()
return redirect('myapp-context-index')
else:
form = ContextForm(instance=object)
return render_to_response("myapp/context/edit.html", {'object': object, 'form': form})
과 : 일반 뷰처럼
from django.core import urlresolvers
from django.views.generic.create_update import update_object
from myapp.models import Context
def edit(request, item_id):
return update_object(request,
object_id=item_id,
form_class=ContextForm,
template_name="myapp/context/edit.html",
post_save_redirect=urlresolvers.reverse("myapp-context-index")
)
, 그들은 단지 정상적인 기능입니다. 원한다면 URLconf에 뷰를 완벽하게 구성 할 수 있습니다.
는 보너스로, 당신은 또한 얻을 :
- 로그인 인증 검사가
django.contrib.messages
에서
- 성공 상태 메시지 (
login_required=True
을 통과).
- 오류를 검사하는 코드가 줄어 듭니다.
form_class
대신 model
매개 변수를 제공하면 기본값은 ModelForm
입니다.
template_name
의 기본값은 "appname/model_form.html"이지만, 너무 나을 정도입니다.
class ContextForm(forms.ModelForm):
"""The form for a context"""
class Meta:
model = Context
exclude = ('collection',)
def save(self, commit=True):
"""Overwritten save to force collection_id to a value"""
model = super(ContextForm, self).save(commit=False)
model.collection_id = 1
if commit:
model.save()
return model
감사합니다, TM : 여기
는 폼 클래스들은 모두 주입니다. 그들은 이것을 문서에 추가해야합니다 :). 나는 일반 뷰에서 완전히 팔리지는 않았다. direct_to_template과 관련된 예제는 많은 코드 (2 줄)를 저장하지 않으며 수동으로 템플릿을 지정해야합니다. 나쁜 부분은 응용 프로그램을 조금 더 이해하기 어렵게 만든다는 것입니다. 왜냐하면이 간단한 작업을 수행하는 데 필요한 것보다 장고에 대해 더 많이 알고 있어야하기 때문입니다. – allyourcode
@allyourcode 더 복잡한 코드를 저장하기 위해서는 더 복잡한 뷰를 사용하여 매우 빠른 예제를 선택했습니다. 또한 모델에서 작동하는보기의 경우 이름 지정 규칙을 기반으로 템플릿을 자동으로 선택합니다 (또는 규칙을 따르고 싶지 않으면 재정의 할 수 있음). 자세한 예제는 http://docs.djangoproject.com/en/1.1/ref/generic-views/를 참조하십시오. 이러한 뷰 중 일부를 처음부터 작성하고 비교하는 것이 좋습니다. 그 중 어느 것도 거대하고 복잡하지는 않습니다. 작성하고 디버그하는 것이 하나도 적습니다. –
다시 한 번 감사드립니다. 나는 이미 Django 개발 버전의 문서를보고 있었다. – allyourcode