gpt4 book ai didi

python - Django ModelForm,将外键作为隐藏字段

转载 作者:行者123 更新时间:2023-11-28 17:54:58 28 4
gpt4 key购买 nike

我基本上是在构建一个非常简单的表单。让我们坚持 django 教程中给出的书籍/出版商示例,并以此为基础。

我有一个用户登录到网络应用程序,此时他们可以做的第一件事就是点击发布者。然后为他们的 session 保存此发布者。在那之后,我把他们带到了一个创建书籍的表格。在那里,我将数据库中的发布者 ID 嵌入到一个隐藏字段中。

在用户提交 HTTP POST 后,我会执行如下操作:

mybookform = BookForm(request.POST)
if mybookform.is_valid():
abook = mybookform.save(commit=False)
abook.publisher_id = request.POST['publisher_id']
mybookform.save()

是的,这里做了一些幼稚的事情,例如盲目获取 publisher_id 并验证它是否确实是真正的发布者 ID,以及其他安全问题。让我们暂时不要关注它。

我的问题是,有没有更好的方法来处理这个问题?虽然假设这个例子在逻辑上没有意义,但在我的特定应用程序中这个例子实际上是有意义的。问题是我收到一个 ValueError 异常,指出 publisher_id 需要是一个 Publisher 实例。

现在我可以使用 Publisher.objects.filter(id=..) 轻松检索发布者实例并使用它。问题是,真的有必要吗?我可以避免对数据库进行额外查询并以某种方式以更“优雅”的方式更新此表单实例吗?

此外,是否有可能以某种方式将发布者嵌入隐藏字段中,这样我就不需要执行 mybookform.save(commit=False) 而只需执行 mybookform = BookForm(request.POST) 后跟 mybookform.save( )立即?

最佳答案

检索发布者的实例确实可以防止可能引用完全无效的发布者的客户端更改。

对于您的第二个问题,是的,您可以通过 overriding the field in the ModelForm 将该字段作为隐藏字段包含在内。使用适当的表单字段将 widget 设置为 HiddenInput .

关于python - Django ModelForm,将外键作为隐藏字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1817286/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com