用简单的JSON字段加快Django和Postgres的速度[英] Speed up Django & Postgres with simple JSON field

本文是小编为大家收集整理的关于用简单的JSON字段加快Django和Postgres的速度的处理方法,想解了用简单的JSON字段加快Django和Postgres的速度的问题怎么解决?用简单的JSON字段加快Django和Postgres的速度问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个非常非常复杂的模型,具有FK和M2M的许多相关模型,这些模型也有很多关系,等等.

因此,渲染此类对象的列表是一个非常昂贵的SQL操作,我想对其进行优化. (select_recated and prefetch_reced帮助,但有点)

我也许有一个非常愚蠢但非常简单的想法 - 定义保存方法,将所有对象的数据序列化到字段存储JSON

做这样的事情:

class VeryComplexModel(models.Model):

    # some_field
    # some_field
    # ...

    json = models.TextField()

    def save(self):
        json = serialize(self)

in Views.py:

complexModels = ComplexModel.objects.get_values(json)

和模板中:

{% for m in complexModels %}

    {{ m.some_field }}

    {{ m.some_field.some_fields.some_field }}

{% endif %}

是个坏主意吗?也许这通常是一个好主意,但是我应该使用更合适的东西,例如特殊的JSON领域或其他东西?

Big Thanx用于建议!

推荐答案

django支持jsonfield for Postgresql,这是示例

from django.contrib.postgres.fields import JSONField
from django.db import models

class Dog(models.Model):
    name = models.CharField(max_length=200)
    data = JSONField()

    def __str__(self):  # __unicode__ on Python 2
        return self.name

您还可以在此链接上阅读有关它的更多信息 httpps ://docs.djangoproject.com/en/dev/ref/contrib/postgres/fields/#jsonfield

您也可以在PostgreSQL中尝试Hstorefield,Hstorefield比JSONFIELD快,因为使用Hstore,您需要在PostgreSql

中启用Hstore扩展
postgres_prompt=> create extension hstore;

在您的迁移文件中,您需要添加此

from django.contrib.postgres.operations import HStoreExtension

class Migration(migrations.Migration):
    ...

    operations = [
        HStoreExtension(),
        ...
    ]

这是模型中使用Hstore的示例:

from django.contrib.postgres.fields import HStoreField
from django.db import models

class Dog(models.Model):
    name = models.CharField(max_length=200)
    data = HStoreField()

    def __str__(self):  # __unicode__ on Python 2
        return self.name

要了解更多有关此的信息: https ://docs.djangoproject.com/en/1.9/ref/contrib/postgres/fields/#hstorefield

其他推荐答案

django支持jsonfield for Postgresql,看看: PostgreSQL特定模型字段

本文地址:https://www.itbaoku.cn/post/1764128.html