Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django:想要有一个用于动态更改序列数据的表单吗_Python_Django_Django Forms_Pyyaml - Fatal编程技术网

Python django:想要有一个用于动态更改序列数据的表单吗

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界面。我无法想象如何为此类数据定义表单和模型。问题在于数据不是静态的,例如,用户可以为“

Django专家-我是一个新手,需要你在以下方面的帮助

假设我有一些复杂的数据结构,一个任意的例子:

yaml格式

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 []