我在MySQL中有一个JSON列:
使用django-mysql第三方库
from django.db import models
from django_mysql.models import JSONField
def json_default():
return {'foo': '', 'bar': ''}
class Test(models.Model):
json_field = JSONField(default=json_default)
def __getattribute__(self, name):
attr = models.Model.__getattribute__(self, name)
if name == 'json_field' and not attr:
return json_default()
return attr
def save(self, *args, **kwargs):
if all(value.strip() == '' for value in self.json_field.values()):
self.json_field = None
else:
self.json_field = {k:v.strip() for k, v in self.json_field.items()}
super(Test, self).save(*args, **kwargs)问题是,每当调用超级方法时,就会在内部调用,因此,它将保存为json_default()和not null。
发布于 2018-08-17 14:16:54
有一个麻木不仁的解决方案来解决这个问题,请告诉我是否有更好的实现方法。
PS:我是python和Django的新手。
from django.db import models
from django_mysql.models import JSONField
def json_default():
return {'foo': '', 'bar': ''}
class Test(models.Model):
json_field = JSONField(default=json_default, blank=True, null=True)
def __getattribute__(self, name):
attr = models.Model.__getattribute__(self, name)
if name == 'json_field':
if attr is None: # while get from db
return json_default()
elif attr == json_default(): # while save to db
return None
return attr
def save(self, *args, **kwargs):
if self.json_field is not None:
self.json_field = {k:v.strip() for k, v in self.json_field.items()}
super(Test, self).save(*args, **kwargs)https://stackoverflow.com/questions/51878839
复制相似问题