반응형
나는 멋진 형태와 그것을 처리하기위한 크고 복잡한 '추가'기능을 만들었다. 이렇게 시작합니다 ...
def add(req):
if req.method == 'POST':
form = ArticleForm(req.POST)
if form.is_valid():
article = form.save(commit=False)
article.author = req.user
# more processing ...
이제는 edit ()
메서드의 모든 기능을 복제하고 싶지 않기 때문에 edit
가 똑같은 템플릿을 사용할 수 있고 아마도 < code> id 필드를 양식에 추가하면 add
함수가 편집중인 내용을 알 수 있습니다. 하지만 이것에는 몇 가지 문제가 있습니다
그래서 이것을 어떻게 처리합니까?
해결 방법
ModelForm에서 양식을 확장하는 경우 instance
키워드 인수를 사용하십시오. 여기에서 기존 기사를 편집하는지 추가하는지에 따라 기존 인스턴스
또는 새 인스턴스를 전달합니다. 두 경우 모두 author
필드가 인스턴스에 설정되어 있으므로 commit = False
가 필요하지 않습니다. 또한 저자 만 자신의 기사를 편집 할 수 있다고 가정하므로 HttpResponseForbidden 응답이 표시됩니다.
from django.http import HttpResponseForbidden
from django.shortcuts import get_object_or_404, redirect, render, reverse
@login_required
def edit(request, id=None, template_name='article_edit_template.html'):
if id:
article = get_object_or_404(Article, pk=id)
if article.author != request.user:
return HttpResponseForbidden()
else:
article = Article(author=request.user)
form = ArticleForm(request.POST or None, instance=article)
if request.POST and form.is_valid():
form.save()
# Save was successful, so redirect to another page
redirect_url = reverse(article_save_success)
return redirect(redirect_url)
return render(request, template_name, {
'form': form
})
그리고 urls.py
에서 :
(r'^article/new/$', views.edit, {}, 'article_new'),
(r'^article/edit/(?P<id>\d+)/$', views.edit, {}, 'article_edit'),
동일한 edit
보기가 추가 및 수정에 사용되지만 URL 수정 패턴 만보기에 ID를 전달합니다. 이 작업이 양식에서 잘 작동하도록하려면 양식에서 author
필드를 생략해야합니다.
class ArticleForm(forms.ModelForm):
class Meta:
model = Article
exclude = ('author',)
참조 페이지 https://stackoverflow.com/questions/1854237
반응형
'파이썬' 카테고리의 다른 글
파이썬 Python: strip a wildcard word (0) | 2021.01.07 |
---|---|
파이썬 Python : 어떤 OS에서 실행 중입니까? (0) | 2021.01.07 |
파이썬 가상 파일 처리는 어떻게합니까? (0) | 2021.01.07 |
파이썬 How to create a zip archive of a directory in Python? (0) | 2021.01.07 |
파이썬 List Comprehension Python에서 두 개의 for 루프를 프레임하는 방법 (0) | 2021.01.07 |
댓글