django 에서 사용자 정의 필드 Field 설명

Django 의 Field 클래스 중 방법 은 다음 과 같 습 니 다.
to_python()\#데이터베이스 데 이 터 를 python 데이터 로 변환 합 니 다.
from_db_value()\#데이터베이스 데 이 터 를 python 데이터 로 변환
get_pre_value()\#python 데 이 터 를 압축 하여 데이터베이스 에 저장 합 니 다.
get_db_pre_value()\#압축 된 데 이 터 를 데이터베이스 조회 집합 으로 변환
get_prep_lookup()\#필터 조건 지정
value_to_string()\#데이터 직렬 화
문자열,날짜,정수 등 보다 더 복잡 한 데이터 구 조 를 만 들 려 면 to 를 다시 써 야 할 수도 있 습 니 다.python 과 fromdb_value()방법(Django 가 제공 하 는 SubfileBase 메타 클래스,그 는 할당 할 때 항상 to 를 호출 합 니 다.python()
간단 한 ListField 필드 형식

# _*_ coding:utf-8 _*_
from django.db import models
import ast


class ListField(models.TextField):
  """   list  
  models.SubfieldBase    to_python    from_db_value
           python  
       from_db_value             python  
  to_python      form  
  """
  __metacalss__ = models.SubfieldBase
  description = 'Stores a python list'

  

def __init__(self, *args, **kwargs):

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

  # def db_type(self, connection):
  #   if connection.setting_dict['ENGINE'] == 'django.db.backends.mysql':
  #     return 'listtype'
  

 def from_db_value(self,value,expression,connection,context):

  """       python  """

    if value is None:
      value=[]
      return value
    if isinstance(value,list):
      return value
    return ast.literal_eval(value)


  def to_python(self, value):
    """            python
    eval(value)  value     
    ast      Python             。
          literal_eval()  :
                        python  ,
            ,        。
    """
    if not value:
      value = []
    if isinstance(value, list):
      return value
    return ast.literal_eval(value)

  def get_prep_value(self, value):
    """
     python           
        python        
            
    :param value:
    :return:
    """
    if value is None:
      return value
    return str(value)

  # def get_db_prep_value(self, value, connection, prepared=False):
  #   """                            """
  #   value = super(ListField, self).get_db_prep_value()
  #   if value is not None:
  #     return connection.Database.Binary(value)
  #   return value
  #

  def get_prep_lookup(self, lookup_type, value):
    """      """
    if lookup_type == 'exact':
      return value
    elif lookup_type == 'in':
      return [self.get_prep_value(v) for v in value]
    else:
      return TypeError('lookup type %r not supported'%lookup_type)
  

def value_to_string(self, obj):

    """            
    Field._get_val_from_obj(obj)             
    """
    value = self._get_val_from_obj(obj)
    return self.get_db_prep_value(value)
이 편 은 django 에서 사용자 정의 필드 Field 에 대한 상세 한 설명 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.참고 하 실 수 있 고 많은 응원 부 탁 드 리 겠 습 니 다.

좋은 웹페이지 즐겨찾기