1

編集ビューで使用するために URL から ID を取得するための許容可能なベスト プラクティスは何なのか疑問に思っています。私が目にするほとんどのサンプル コードはスラッグを使用していますが、SEO は問題ではないため、対処する必要はありません。

次のようなものがあるとします。

def article_edit(request):
    if request.method == 'POST': # If the form has been submitted...
        #a = get_object_or_404(Article, **?XXX?**)
        #a = Article.objects.get(pk=**?XXX?**)

        form = ArticleForm(request.POST, instance=a) # A form bound to the POST data
        if form.is_valid(): # All validation rules pass
            form.save()
            return redirect('/articles/') # Redirect after POST
    else:
        form = ArticleForm() # An unbound form

    return render(request, 'article_form.html', {'form': form})

ここで、POST で送信された ID に基づいて Article オブジェクトを設定するための 2 つの可能なオプションをコメントアウトしました。? XXX ? 渡された ID を参照する方法がわからないことを示します。

これらの 2 つのオプション、および代替オプションに関するご意見をお待ちしております。

4

2 に答える 2

3

渡されたidものは、次のように URL 自体に含める必要があります。

url(r'^articles/(?P<id>\d+)/edit/$', 'views.article_edit', name = 'article_edit'),

次に、ビューでビュー引数から参照できますid

def article_edit(request, id):
    if request.method == 'POST': # If the form has been submitted...
        article = get_object_or_404(Article, pk=id)

また、 django「polls」チュートリアルの「単純なフォームの作成」の章もご覧ください。同じアプローチが使用されています。

それが役立つことを願っています。

于 2013-08-07T05:10:43.863 に答える
2

これを試して:

urls.py :
url(r'^articles/(?P<article_id>\d+)/edit/$', 'views.article_edit', name = 'article'),

views.py:
def article_edit(request, id):
if request.method == 'POST': 
    article = get_object_or_404(Article,id=article_id)
于 2013-08-07T05:16:05.950 に答える