显示和保存Django ArrayField

时间:2017-07-20 19:34:37

标签: django django-models django-forms django-templates django-views

我在模型中有一种ArrayField类型。自动为my_list的建议元素列表中的后端。但是,用户需要根据需要更新此列表。该模型如下所示:

class my_model(models.Model):
    my_list = ArrayField(
        models.CharField(max_length=10)
    )

问题是,在模板中呈现my_list时,是一个带逗号分隔列表的单个html输入标记。例如a,b,c,d

我的问题有两个问题。如何使用模板语言显示逗号分隔列表,以便每个元素都有自己的html输入框。此外,我正在努力的更难的事情是如何使这些元素作为数组保存回模型。

我目前的想法是用javascript攻击前端。但有没有更好的方法来使用Django?

3 个答案:

答案 0 :(得分:1)

我不知道你的确切目标是什么,但它可能是这样的:

{% for element in my_list %}
    <div> {{element}} </div> <!--any html tag which is you desire--> 
{% endfor %}

答案 1 :(得分:0)

您需要创建并注册自定义Widget

  

小部件是Django对HTML输入元素的表示。该小部件处理HTML的呈现,以及从与小部件对应的GET / POST字典中提取数据。

将呈现多行textarea的简单示例:

class ArrayWidget(Textarea):
    def format_value(self, value):
        if value is None or len(value) == 0:
            return None
        else:
            return '\n'.join(value.split(','))

    def value_from_datadict(self, data, files, name):
        return data.get(name).splitlines()

答案 2 :(得分:0)

例如,您可以创建几个名称属性为“ myfield”的字段。然后在“视图”中,您可以使用request.POST.getlist('myfield')获取该字段的列表,并可以在循环中对其进行迭代并将其存储在arrayfield中。 2年后,但我希望这能解决您的问题。