2017-10-28 75 views
1

我有一个显示在数据库like this中的MultipleChoiceField表单字段(与模型CharField关联)。它似乎已被转换为数据库中的字符串,因为当我尝试在HTML中使用'for property_type'属性中的'for property来显示它时,它显示like this。我希望它被显示like thisDjango - MultipleChoiceField显示为字符串而不是列表

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

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 
+0

您应该修正数据首先所有的存储方式。 –

+0

@DanielRoseman对不起,我在数据存储方式上犯了错误? – Valachio

+0

该字段看起来像列表一样存储在数据库中。例如['hi','bye']。但是当我尝试用for循环显示HTML中的列表时,它每次显示1位数,这意味着它实际上是一个字符串而不是一个列表。 如何在将值显示在HTML上之前将值转换为列表? – Valachio

回答

0

models.py

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

,并在你的模板中使用

{% for property in className.split_properties %} {{ property }} {% endfor %} 
相关问题