gpt4 book ai didi

python - 直接在Models中存储django forms.MultipleChoiceField

转载 作者:太空宇宙 更新时间:2023-11-03 12:29:50 25 4
gpt4 key购买 nike

假设我有如下定义的选择:

choices = (('1','a'),
('2','b'),
('3','c'))

以及在 MultipleChoiceField 中呈现和输入这些值的表单,

class Form1(forms.Form):
field = forms.MultipleChoiceField(choices=choices)

在模型中存储字段的正确方法是什么。

我当然可以遍历 forms.cleaned_data['field'] 并获得适合 models.CommaSeperatedIntegerField 的值。

同样,每次我检索这些值时,我都必须循环并转换为选项。

我认为有更好的方法,因为通过这种方式,我在某种程度上重新实现了 CommaSeperateIntegerField 应该执行的功能。

最佳答案

我首先要考虑的是更好地规范化您的数据库模式;如果您的模型的单个实例可以为该字段提供多个值,则该字段可能应该是带有 ForeignKey 的链接模型。

如果您使用的是 Postgres,您还可以使用 ARRAY 字段; Django 现在有 built-in support .

如果您做不到其中任何一个,那么您基本上需要重新实现一个(更好的)版本的 CommaSeparatedIntegerField。原因是 CommaSeparatedIntegerField 只不过是 a plain CharField whose default formfield representation is a regex-validated text input .换句话说,它不会做任何对您有用的事情。

您需要编写的是自定义 ListField 或 MultipleValuesField,它需要一个 Python 列表并返回一个 Python 列表,但在内部将该列表转换为/自逗号分隔的字符串以插入到数据库中。阅读 documentation on custom model fields ;我认为在您的情况下,您需要一个 CharField 的子类并重写两个方法:to_python (将 CSV 字符串转换为 Python 列表)和 get_db_prep_value (将 Python 列表转换为 CSV 字符串)。

关于python - 直接在Models中存储django forms.MultipleChoiceField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1399622/

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