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 获取查询集

如何使用 Modelform 和 jquery 在 django 中获取相互依赖的下拉菜单?

django中的Form和ModelForm中的问题

modelForm所遇问题

如何动态更新ModelForm的初始值?

如何在 Django 中向 ModelForm 添加外键字段?