【问题标题】:Displaying and saving Django ArrayField显示和保存 Django ArrayField
【发布时间】:2017-12-26 16:27:15
【问题描述】:

我在模型中有一个 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 呢?

【问题讨论】:

  • 您确定要为每个元素使用单独的input 吗?单个select 不是更好吗?用户如何将任何内容添加到列表中?

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 但是当我按下保存时,它并没有正确保存回模型
    • 你应该在这里发布你的代码,然后其他人可以提供帮助,因为现在它太模糊了,你的意图是什么
    【解决方案3】:

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

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

    一个将呈现多行文本区域的简单示例:

    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()
    

    【讨论】:

      猜你喜欢
      • 2020-11-16
      • 1970-01-01
      • 2018-10-20
      • 2016-08-13
      • 2015-12-21
      • 2017-04-29
      • 1970-01-01
      • 2019-07-27
      相关资源
      最近更新 更多