首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Django Postgres JSONField根据对象是创建还是更新而被不同地解码?

为什么Django Postgres JSONField根据对象是创建还是更新而被不同地解码?
EN

Stack Overflow用户
提问于 2019-09-05 11:57:43
回答 1查看 321关注 0票数 1

我有一个带有PostGRES JSONField的模型:

代码语言:javascript
复制
from django.contrib.postgres.fields import JSONField
# ... other imports ...

class Feature(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    # ... other fields ...
    meta = JSONField(default=dict)

以及创建或更新特性的导入程序命令:

代码语言:javascript
复制
    my_meta = {
        'mykey': 'something',
    }
    feature = Feature.objects.filter(id=id).first()
    if feature is None:
        # The feature was not imported previously
        feature = Feature.objects.create(
            id=id,
            meta=my_meta,
        )
        print('CREATED FEATURE.META', feature.meta, feature.meta.__class__.__name__)
    else:
        # The feature was already imported above - update the existing feature with new metadata
        feature.meta = my_meta,
        feature.save()
        print('UPDATED FEATURE.META', feature.meta, feature.meta.__class__.__name__)

当运行两个不同的测试用例时,每个测试用例都创建了一个特性,但是测试了'if‘语句的两个分支,我得到:

CREATED FEATURE.META {'mykey': 'something'} dict

UPDATED FEATURE.META ({'mykey': 'something'},) tuple

问题

为什么在后一种情况下它会在元组内部解码呢?

注意到

  • 是的,我的默认值是可调用的(JSONField中常见的问题ppl )
  • 不,我没有安装django-jsonfield (这会导致与本机JSONField的奇怪不兼容)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-05 12:05:16

你在行尾留了个逗号,就在这里:

代码语言:javascript
复制
        feature.meta = my_meta,

这导致用一个成员创建一个元组,而不是直接将该成员分配给meta。请记住,根据上下文的不同,逗号可以以不同的方式工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57804979

复制
相关文章

相似问题

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