首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在django和MySQL中将null检索为JSON默认值

在django和MySQL中将null检索为JSON默认值
EN

Stack Overflow用户
提问于 2018-08-16 13:56:43
回答 1查看 330关注 0票数 1

我在MySQL中有一个JSON列:

  1. 如果管理员给出默认值,则应该为null。
  2. 如果默认值为null,则使用默认值预加载到admins。

使用django-mysql第三方库

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

发布于 2018-08-17 14:16:54

有一个麻木不仁的解决方案来解决这个问题,请告诉我是否有更好的实现方法。

PS:我是python和Django的新手。

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51878839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档