Python django:想要有一个用于动态更改序列数据的表单吗
Django专家-我是一个新手,需要你在以下方面的帮助 假设我有一些复杂的数据结构,一个任意的例子: yaml格式Python django:想要有一个用于动态更改序列数据的表单吗,python,django,django-forms,pyyaml,Python,Django,Django Forms,Pyyaml,Django专家-我是一个新手,需要你在以下方面的帮助 假设我有一些复杂的数据结构,一个任意的例子: yaml格式 foo: { ff: [ bar, foobar] bb: {'some map values'} } bar: [str!! "", str!! ""] foobar: [str!! "", str!! ""] 我的目标是一个允许创建/修改/保存和显示此类数据的web界面。我无法想象如何为此类数据定义表单和模型。问题在于数据不是静态的,例如,用户可以为“
foo:
{
ff: [ bar, foobar]
bb: {'some map values'}
}
bar: [str!! "", str!! ""]
foobar: [str!! "", str!! ""]
我的目标是一个允许创建/修改/保存和显示此类数据的web界面。我无法想象如何为此类数据定义表单和模型。问题在于数据不是静态的,例如,用户可以为“ff”值添加任意数量的列表项,即“bar”和“foobar”两个项不是固定的,可能添加的项数不限。其余的序列数据也是如此。我只知道'ff'的值是列表值。我想象web视图带有一些小的+符号,允许添加数据
一旦表单填写完毕,我希望能够使用pyyaml将其转换为yaml并保存数据。反向-从文件中加载数据并显示在表单中以允许修改
因此,简单地说,就是如何处理动态、有序的表单/模型字段
另一个问题是没有内置类型字段。我想为每种类型的字段和外键引用创建一个单独的表单。这样做对吗?或者定义自定义字段更好
非常感谢 如果您不想为列表创建具体模型,可以使用: 然后像这样使用它:
m1 = MyModel()
m1.my_list = [1, 2, 3]
m1.save()
m2 = MyModel()
m2.my_list = ["a", "b", "c", "d"]
m2.save()
更新
在表单中,应根据需要的数据类型创建自定义字段。最简单的方法是使用文本字段并将逗号分隔的文本转换为列表:
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
def __init__(self, *args, **kwargs):
super(MyModel, self).__init__(*args, **kwargs)
self.fields["my_list"] = forms.CharField(initial=",".join(self.instance.my_list))
def clean_my_list(self):
data = self.cleaned_data.get('my_list', '')
if data:
return data.split(",") # Add error check, convert to number, etc
return []
谢谢。看来这能解决我的问题。那么表单字段呢?我的意思是-如何将表单绑定到这样的模型?谢谢。你帮我解决了一半的问题。我还需要找到一种方法来处理类对象列表,而不仅仅是字符串或整数列表。
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
def __init__(self, *args, **kwargs):
super(MyModel, self).__init__(*args, **kwargs)
self.fields["my_list"] = forms.CharField(initial=",".join(self.instance.my_list))
def clean_my_list(self):
data = self.cleaned_data.get('my_list', '')
if data:
return data.split(",") # Add error check, convert to number, etc
return []