본문 바로가기
파이썬

파이썬 양식 추가를 기반으로 장고 편집 양식?

by º기록 2021. 1. 7.
반응형

나는 멋진 형태와 그것을 처리하기위한 크고 복잡한 '추가'기능을 만들었다. 이렇게 시작합니다 ...

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

 

 

반응형

댓글