如何区分数据库中JSONField的Null值与空JSON{}并分别处理?
区分JSONField的Null值与空JSON对象{}
嘿,我懂你的需求了!现在你的代码里if cat.path is None:会同时命中两种情况:数据库里存的是NULL,或者存的是空JSON对象{}。这是因为Django的JSONField会把数据库中的NULL映射成Python的None,而空JSON{}会被解析成Python的空字典{}——但你现在的判断只检查了is None,所以这两种情况都被归为一类了。
要分别处理这两种情况,你只需要把判断逻辑拆成两步:先检查是否是None(对应数据库的NULL),再检查是否是空字典(对应空JSON{})。具体代码如下:
cat = Cat.objects.order_by('?')[0] if cat.path is None: # 这里处理数据库中path为NULL的情况 print("处理NULL的逻辑") elif cat.path == {}: # 这里处理path是空JSON对象{}的情况 print("处理空JSON对象的逻辑") else: # 这里处理path有实际内容的情况 print("处理正常JSON内容的逻辑")
补充说明
- Django的JSONField在与数据库交互时,会严格映射类型:数据库的
NULL→ Python的None,空JSON对象{}→ Python的dict()/{},所以用== {}就能准确匹配空JSON的情况。 - 如果你的场景中还可能出现空JSON数组
[],可以再添一个elif cat.path == []:的判断,但根据你的描述,只需要关注空对象的话,上面的代码就足够了。
内容的提问来源于stack exchange,提问作者user3541631
相关产品推荐
相关产品推荐

