2017-10-28 65 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 %} 
相關問題