【发布时间】:2021-10-17 14:11:58
【问题描述】:
我得到JSONFields,我每次旅行都必须encode 和decode,问题是我得到的很少,所以我试图制作一个这样的自定义字段:
class JSONField(models.JSONField):
"""A Field to encode & decode JSONField."""
def __init__(self, default=dict, encoder=None, decoder=None):
self.encoder = encoder
self.decoder = decoder
self.default = default
def get_prep_value(self, value: Any) -> Any:
if value is None:
return value
return json.dumps(value, default=self.default, cls=self.encoder)
def from_db_value(self, value, expression, connection):
if value is None:
return value
return json.loads(value, cls=self.decoder)
但是当我在模型上使用它时
class Employee(models.Model):
time_log = JSONField()
我收到此错误AttributeError: 'JSONField' object has no attribute 'name'
File "/Users/mac/Documents/Payroll/payroll/models.py", line 106, in <module>
class Employee(models.Model):
File "/Users/mac/Documents/Payroll/env/lib/python3.9/site-packages/django/db/models/base.py", line 161, in __new__
new_class.add_to_class(obj_name, obj)
File "/Users/mac/Documents/Payroll/env/lib/python3.9/site-packages/django/db/models/base.py", line 326, in add_to_class
value.contribute_to_class(cls, name)
File "/Users/mac/Documents/Payroll/env/lib/python3.9/site-packages/django/db/models/fields/__init__.py", line 781, in contribute_to_class
self.set_attributes_from_name(name)
File "/Users/mac/Documents/Payroll/env/lib/python3.9/site-packages/django/db/models/fields/__init__.py", line 768, in set_attributes_from_name
self.name = self.name or name
AttributeError: 'JSONField' object has no attribute 'name'
我该如何解决这个问题?
【问题讨论】:
标签: django django-models serialization orm