gpt4 book ai didi

django - 在 Django 中,如何使用 ModelForm 将多个表单字段作为值列表保存到单个模型字段中?

转载 作者:行者123 更新时间:2023-12-02 06:23:24 24 4
gpt4 key购买 nike

鉴于:

from django.db import models
class MyModel(models.Model):
...
owners = models.CharField(max_length=255, blank=False)

其中 owners 是管道分隔的电子邮件地址列表。

在页面中,有多个 <input> 字段具有相同的 name ,因此服务器获取数组中的值。

表单的 HTML 代码是手工完成的,不使用内置模板(例如 form.as_p )。

Django 的 ModelForm 可以处理这样的事情吗?

在检索模型(我是否必须创建自定义 models.Manager ?)和保存模型时(我要覆盖哪个 save() 方法? ModelModelForm ),处理数据转换的正确位置是什么?

--更新澄清--

在数据库中:
+-----+---------------------------+-----+
| ... | owners | ... |
+-----+---------------------------+-----+
| ... | "a@a.com|b@b.com|c@c.com" | ... |
+-----+---------------------------+-----+

表格:
<form ... >
...
<input type="text" name="owners" />
<input type="text" name="owners" />
<input type="text" name="owners" />
...
</form>

最佳答案

您可以使用 forms.MultiValueField forms.MultiWidget MultiValueField 知道您的模型的一个字段包含多个离散值,而 MultiWidget 小部件知道应该如何呈现每个离散值。他们将为您的字段创建唯一名称,以便他们可以从 POST 值重建表单,并且您不必覆盖任何提供实现的表单方法,即您不必覆盖 save()

正如您所看到的,官方文档对这个主题有点薄。我建议您查看代码以了解所有内容是如何连接的以及何时调用什么,因为您的需求总是需要一个独特的解决方案,即:该字段将包含多少封电子邮件?正好两个,所以我可以手动指定两个 CharField 小部件,还是会在 0-2 之间,所以我必须根据传递的值动态构造所有内容?如果您需要一个好的示例作为起始引用,请查看 this SO question,其中包含一个干净且易于遵循的实现。

理想情况下,您需要将 PipedEmailAddressesField 扩展为模型字段的 CharField,该字段知道它正在存储管道电子邮件地址。它应该能够构建自己合适的 MultiValueField 表单字段,而该表单字段又应该构建自己合适的 MultiWidget 字段。

关于django - 在 Django 中,如何使用 ModelForm 将多个表单字段作为值列表保存到单个模型字段中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5335603/

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