我有一个带有PostGRES JSONField的模型:
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)以及创建或更新特性的导入程序命令:
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
问题
为什么在后一种情况下它会在元组内部解码呢?
注意到
django-jsonfield (这会导致与本机JSONField的奇怪不兼容)发布于 2019-09-05 12:05:16
你在行尾留了个逗号,就在这里:
feature.meta = my_meta,这导致用一个成员创建一个元组,而不是直接将该成员分配给meta。请记住,根据上下文的不同,逗号可以以不同的方式工作。
https://stackoverflow.com/questions/57804979
复制相似问题