显示和保存 Django ArrayField
Posted
技术标签:
【中文标题】显示和保存 Django ArrayField【英文标题】:Displaying and saving 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
不是更好吗?用户如何将任何内容添加到列表中?
【参考方案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()
【讨论】:
以上是关于显示和保存 Django ArrayField的主要内容,如果未能解决你的问题,请参考以下文章