2017-10-14 67 views
0

我一直在这个问题上抨击了几个星期,但我决心让ModelForm工作!当您使用从ModelForm接收的数据处理POST时,我知道您需要从数据库获取原始记录,然后使用该原始记录创建一个新表单作为“实例”。这是documented in the Django docs如下:Django如何从ModelForm获取记录ID

>>> from myapp.models import Article 
>>> from myapp.forms import ArticleForm 

# Create a form instance from POST data. 
>>> f = ArticleForm(request.POST) 

# Save a new Article object from the form's data. 
>>> new_article = f.save() 

# Create a form to edit an existing Article, but use 
# POST data to populate the form. 
>>> a = Article.objects.get(pk=1) 
>>> f = ArticleForm(request.POST, instance=a) 
>>> f.save() 

在这个例子中,他们知道他们正在寻找记录的PK是1,但你怎么知道的PK,如果你从request.POST读取数据,假设POST是基于您之前写入屏幕的数据? ModelForm不存储pk。那么,你从哪里挑选这个?没有它,你怎么知道哪个记录从数据库中退出(如上面的'a')?

谢谢!

+2

你可以将它传递到您的视图通过URL例如。/articles/update/1/ – efkin

回答

1

您可以使用named groups要在URL参数传递给您的视图。

所以,如果你有一个网址,如:

url(r'^articles/update/(?P<article_id>[0-9]+)/$', views.update_article) 

,你可以在你的视图中使用:

def update_article(request, article_id=None): 
    pass 
+0

谢谢,@efkin。这工作!一个小的变化是我使用了以下正则表达式:[0-9] *这允许用户通过访问没有文章ID的页面来添加新的新文章。 – Ben