我有一個顯示在數據庫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
您應該修正數據首先所有的存儲方式。 –
@DanielRoseman對不起,我在數據存儲方式上犯了錯誤? – Valachio
該字段看起來像列表一樣存儲在數據庫中。例如['hi','bye']。但是當我嘗試用for循環顯示HTML中的列表時,它每次顯示1位數,這意味着它實際上是一個字符串而不是一個列表。 如何在將值顯示在HTML上之前將值轉換爲列表? – Valachio