close

把 List 存入資料庫後

取出來後 程式碼卻不認得說這是個 List

嘗試過強制轉換後還是無法正常操作這個資料庫取出的 List

因為當你定義models中資料表欄位的儲存類型的時候,同時也把 List 轉換成別種型態儲存了

所以取出資料後很可能會認為是 str 型態

由於Django的models沒有內建的串列型態可以儲存

所以得自定義 field 來使用了

代碼如下:

 #自定義field
from django.db import models
import ast

class ListField(models.TextField):

    def __init__(self, *args, **kwargs):
        super(ListField, self).__init__(*args, **kwargs)

    def from_db_value(self, value, expression, connection, context):
        if not value:
            value = []

        if isinstance(value, list):
            return value

        return ast.literal_eval(value)

    def get_prep_value(self, value):
        if value is None:
            return value

        return str(value)

    def value_to_string(self, obj):
        value = self._get_val_from_obj(obj)
        return self.get_db_prep_value(value)

使用方式如下:

class test(models.Model):
  ctest = ListField()

 

最後取出資料就會是 List 型態囉~

 

參考來源:

Django 自定义Field

How can I use from_db_value() in django model?

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 ivankao 的頭像
    ivankao

    IvanKao的部落格

    ivankao 發表在 痞客邦 留言(0) 人氣()