Django 自定义数组字段:Getter、Setter 和 Model Field 实现
Django 本身没有内置的数组字段,但你可以使用逗号分隔的字符串、JSON 字符串或自定义模型字段来模拟数组。
一种实现自定义数组模型字段的方法是使用 Python 列表存储值,并使用自定义字段来序列化和反序列化列表。
以下是一个示例:
import json
from django.db import models
class ArrayField(models.TextField):
'自定义数组模型字段。'
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def from_db_value(self, value, expression, connection):
if value is None:
return []
return json.loads(value)
def to_python(self, value):
if isinstance(value, list):
return value
if value is None:
return []
return json.loads(value)
def get_prep_value(self, value):
if value is None:
return ''
return json.dumps(value)
def value_to_string(self, obj):
value = self._get_val_from_obj(obj)
return self.get_prep_value(value)
使用此自定义字段,你可以定义一个存储数组的模型字段:
class MyModel(models.Model):
my_array = ArrayField()
你也可以定义 getter 和 setter 方法来操作数组:
class MyModel(models.Model):
my_array = ArrayField()
def get_my_array(self):
return self.my_array
def set_my_array(self, value):
self.my_array = value
my_array_property = property(get_my_array, set_my_array)
现在你可以使用 my_array_property 属性来获取和设置数组:
>>> instance = MyModel.objects.create(my_array=[1, 2, 3])
>>> instance.my_array_property
[1, 2, 3]
>>> instance.my_array_property = [4, 5, 6]
>>> instance.my_array
[4, 5, 6]
原文地址: https://www.cveoy.top/t/topic/mJjt 著作权归作者所有。请勿转载和采集!