1

我想知道从 url 中提取 id 以在编辑视图中使用的可接受的最佳做法是什么。我看到的大多数示例代码都使用 slugs,我不需要处理它,因为 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 对象。? XXX? 表示我不确定如何引用传入的 id。

感谢您对这两个选项以及替代选项的任何输入。

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“投票”教程的简单表单章节 - 使用相同的方法。

希望有帮助。

于 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 回答