gpt4 book ai didi

python - 通过 Django 表单传递数据

转载 作者:行者123 更新时间:2023-12-05 06:33:53 25 4
gpt4 key购买 nike

我觉得我错过了显而易见的东西,但我无法解决!

我写了一个自定义表单(用于 django admin 之外),我想用它来创建/更新许多模型实例的实例以及保存条件字段。但是我似乎正在丢失我的条件数据。

在我看来,我实例化了一个表单实例并将其传递到请求上下文中:-

View .py

form = MyForm(my_bool=True, pid=7)
render(request 'my_page.html', {'form': form})

表单.py

class MyForm(forms.Form):
def __init__(self, *args, **kwargs):
my_bool = kwargs.pop('my_bool', False)
self.pid = kwargs.pop('pid', None)
super(MyForm, self).__init__(*args, **kwargs)
if my_bool:
self.fields['textbox'] = forms.CharField(max_length=256)

一切正常,表单按预期呈现。现在,当我提交表单时,它会出现在下面

View .py

 if request.method == 'POST':
form = MyForm(request.POST)
if form.is_valid():
# Do Stuff

我的问题是上面代码中的表单对象不包含我的“文本框”或“pid”字段,即使我提交的表单包含。我确定我做错了什么是非常明显的,但是从大量的谷歌搜索中我无法找到一种简单的方法来实例化一个表单,向它传递一些关于我想要显示的字段的数据以及说出 id我最终希望它更新的模型,然后可以访问我在代码的后期部分传递的信息。

我的代码的 # Do Stuff 部分应该采用我传递给表单的“pid”并使用它来获取产品,例如Product.objects.get(pk=pid),但是如果不在 session 中存储 pid,我无法弄清楚如何从回发中访问它。

如果在我的表单中出现验证错误,即 form.is_valid() 返回 false,我会再次呈现请求并传递我已有的表单,这样我会看到验证错误,但是我最初传递的任何条件字段都丢失了,它们的值也丢失了忽略。

也许我只是完全错误地处理它,我应该以不同的方式来做这件事。我想要实现的是一个内容输入表单,其字段根据传递的产品类型而变化,填写表单后将数据保存到该产品实例。

我将不胜感激任何帮助,我发现 Django 非常适应我到目前为止所投入的任何事情,这感觉就像一个常见的用例,我一定是做错了!

我正在使用 Django v1.11 和 Python v3.6。

最佳答案

您正在传递两个参数来创建表单,即 my_bool 和 pid。但是您没有在 POST View 中传递这些参数。特别是 my_bool 是 None 因此永远不会生成文本框字段。改变

form = MyForm(request.POST)

form = MyForm(request.POST, my_bool=True, pid=7)

应该可以解决问题。

关于python - 通过 Django 表单传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50454718/

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