【发布时间】:2018-10-30 08:20:29
【问题描述】:
所以我有这个model 和这个JSONField -
class Details(models.Model):
ref_det = JSONField(null=True, default=dict())
ref_det 以这种格式存储值
{'user_id': '2231', 'org_id': 'qpdkm12'}
模型的每个对象都有其 ref_det 作为仅包含这两个值的字典。
现在我有这个用户 ID 列表 - user_ids - 我想从模型中获取这些对象,其中ref_det 字段中的 user_id 键包含 user_ids 中的任何 user_id列表。
因此,如果我有user_ids = ['2231', '973','431'],我应该得到那些Details 对象,其ref_det 的user_id 作为列表中的3 个值中的任何一个。
我尝试通过contains 进行查找,但我认为它只支持查找单个值而不是列表。
我认为__values__contains (https://docs.djangoproject.com/en/1.9/ref/contrib/postgres/fields/#hstorefield) 适合这个用例,但话说回来,我没有HStoreField。
有谁知道我该如何度过这个难关?
谢谢!
【问题讨论】:
-
这里是 jsonfield 的正确选择吗?由于“模型的每个对象都将其 ref_det 作为仅包含这两个值的字典”,因此适当的关系模型使用起来会更简单,并且可能性能更好。
-
@brunodesthuilliers - 我同意,但 JSONField 早在几个月前就已经在许多地方使用了。所以我认为最好解决它,而不是创建一个新模型。
-
我不是在谈论“创建一个新模型”,而是关于修改现有模型,这可以使用迁移轻松完成。这当然需要更改客户端代码(使用此模型的代码),但如果知道您将始终拥有这两个键并且在 jsonfield 中只有这两个键,那么修复错误的设计比“解决”它更好,甚至如果它现在需要更多的工作(提示:它肯定会在未来节省时间)。只是我的 2 美分...
-
你是对的。这当然更好。
标签: django django-1.9 django-jsonfield