0

该模型包含一个 jsonfield:

class MyModel(Model):
    test_result = JSONField()

要处理的数据是动态的, {'test1':100,'test2':95,'test9':80,...} , { 'test2':60, 'test3':80,'test6':70 ,... } ...
我想找到'test2'的所有测试结果并将它们保存到一个列表中。

all_score_of_test2 =[x.test_result['test2'] for x in MyModel.objects.filter(test_result__has_keys=['test2'])]

它有效,但性能不佳。有没有更快的方法来完成任务?我正在使用 postgresql13.1

4

1 回答 1

0

我建议您创建 M2M 关系而不是使用 JSONField,因为它可以为您提供更好的性能。

class Test(models.Model):
    name = models.CharField(...)  # such as test1, test2


class TestResult(models.Model):
    test = models.ForeignKey(Test, ...)
    person = models.ForeignKey(Person, ...)
    score = models.DecimalField(...)


class MyModel(models.Model):
    test_results = models.ManyToManyField(Test, through=TestResult, ...)

然后可以通过查询得到test2的分数:

all_score_of_test2 = TestResult.objects.filter(test__name='test2').values_list('score', flat=True)
于 2021-05-16T08:46:23.153 回答