Django如何从ModelForm获取记录ID
Posted
技术标签:
【中文标题】Django如何从ModelForm获取记录ID【英文标题】:Django how to get record id from ModelForm 【发布时间】:2018-03-26 18:09:51 【问题描述】:我已经为此苦苦思索了好几个星期,但我决心让 ModelForm 工作!当您使用从 ModelForm 接收的数据处理 POST 时,我知道您需要从数据库中获取原始记录,然后使用该原始记录作为“实例”创建一个新表单。这是documented in the Django docs,如下:
>>> 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。但是,如果您从 request.POST 读取数据,您如何知道 pk,假设 POST 基于您之前的数据写到屏幕上? ModelForm 不存储 pk。那么,你从哪里捡起这个?没有它,你怎么知道从数据库中拉出哪条记录(如上面的'a')?
谢谢!
本
【问题讨论】:
例如,您可以通过 url 将其传递给您的视图。 /articles/update/1/ 【参考方案1】:您可以在 URL 中使用 named groups 将参数传递给您的视图。
所以如果你有一个像这样的网址:
url(r'^articles/update/(?P<article_id>[0-9]+)/$', views.update_article)
你可以在你的视图中使用:
def update_article(request, article_id=None):
pass
【讨论】:
谢谢,@efkin。那行得通!一个小的变化是我使用了以下正则表达式:[0-9]* 这允许用户通过访问没有文章 ID 的页面来添加新的新文章。以上是关于Django如何从ModelForm获取记录ID的主要内容,如果未能解决你的问题,请参考以下文章
Django ModelAdmin 从 ModelForm 获取查询集