Lak*_*sad 3 python django django-models django-forms
假设我的选择定义如下:
choices = (('1','a'),
('2','b'),
('3','c'))
Run Code Online (Sandbox Code Playgroud)
以及在MultipleChoiceField中呈现和输入这些值的表单,
class Form1(forms.Form):
field = forms.MultipleChoiceField(choices=choices)
Run Code Online (Sandbox Code Playgroud)
什么是存储field在模型中的正确方法.
我当然可以遍历forms.cleaned_data['field']并获得适合的值models.CommaSeperatedIntegerField.
同样,每次我检索这些值时,我都必须循环并转换为选项.
我认为有更好的方法可以做到这一点,就像这样,我在某种程度上重新实现了CommaSeperateIntegerField应该做的功能.
Car*_*yer 11
我要考虑的第一件事是更好地规范化数据库模式; 如果模型的单个实例可以具有此字段的多个值,则该字段可能应该是具有ForeignKey的链接模型.
如果你正在使用Postgres,你也可以使用ARRAY字段; Django现在有内置的支持.
如果你不能做其中任何一个,那么你基本上需要重新实现一个(更好的)CommaSeparatedIntegerField版本.原因是CommaSeparatedIntegerField只是一个普通的CharField,它的默认表单字段表示是一个正则表达式验证的文本输入.换句话说,它没有做任何对你有用的事情.
您需要编写的是自定义ListField或MultipleValuesField,它需要Python列表并返回Python列表,但在内部将该列表转换为逗号分隔的字符串,以便插入数据库中.阅读有关自定义模型字段的文档 ; 我认为在你的情况下,你需要一个CharField的子类,它有两个方法被覆盖:to_python(将CSV字符串转换为Python列表)和get_db_prep_value(将Python列表转换为CSV字符串).
| 归档时间: |
|
| 查看次数: |
5883 次 |
| 最近记录: |