Django - MultipleChoiceField显示为字符串而不是列表

时间:2017-10-28 18:52:38

标签: django python-3.x

我有一个MultipleChoiceField表单字段(与模型CharField相关联),它显示在数据库like this中。它似乎已在数据库中转换为字符串,因为当我尝试在HTML中使用'for property in property_type'语句显示它时,它会显示like this。我希望它显示like this

所以我必须编写一些代码来解决这个问题。我的伪代码看起来像:

for record in property_type:
    split record at comma
    for i in record:
        if record[i] is not a letter or number:
            remove record[i]

现在我的问题是,我在哪里编写这段代码?我是在views.py或HTML文件中写的吗?我尝试在视图中进行,但我不知道如何选择单个数据库记录。我尝试在HTML中进行,但我受到模板标签的限制。

以下是我的代码的缩短版本:

models.py:

property_type = models.CharField(max_length=50, help_text="You can select more than 1 option")

forms.py:

property_type = forms.MultipleChoiceField(widget=forms.SelectMultiple, choices=BuyerListing.PROPERTY_TYPE)

HTML:

    {% for property in listing.property_type %}
    <p>Property type: {{ property }}</p>
    {% endfor %}

编辑:

感谢@ytsejam和@Daniel Roseman的工作。使用ytsejam的代码,结果将显示如下:

['1' '2']

我在ytsejam的代码中添加了一个基本的正则表达式来删除括号和引号:

def split_properties(self):
    a = self.property_type
    a = re.sub(r'[\]\[\']', '', a)
    a = a.split(',')
    return a

现在列表将显示如下,这在HTML中非常容易操作。

1 2

1 个答案:

答案 0 :(得分:0)

models.py

 def split_properties(self):
        return self.properties.split(',')

并在您的模板中使用

{% for property in className.split_properties %} {{ property }} {% endfor %}