在django的jsonfield上执行问题的有效方法

时间:2016-10-19 07:10:04

标签: python django postgresql

我试图在django中的jsonfield上提取一些数据,但我写的查询集将永远执行此操作。我查询的数据库有超过1000万条记录:(可以是他们更有效的方式做这个? 这是查询

from django.contrib.postgres.fields import JSONField
from maidea.apps.upload_service.models import MobileUploadHouseholdLog

rejected_hh_somalia = MobileUploadHouseholdLog.objects.filter(status=4, household__contains={'info':{'location':{'label':'Hantiwadag'}}})

my models.py

class MobileUploadHouseholdLog(MAIDEAModel):
    objects = MobileUploadHouseholdLogManager()

    UNPROCESSED = 0
    IMPORTED_TO_SCOPE = 1
    ERROR = 2
    DUPLICATE = 3
    DISCARDED = 4

    IMPORT_STATUS = (
        (UNPROCESSED, _('New')),
        (IMPORTED_TO_SCOPE, _('Import successful')),
        (ERROR, _('Import failed')),
        (DUPLICATE, _('Duplicate upload')),
        (DISCARDED, _('Discarded upload')),
    )

    uuid = UUIDField(verbose_name=_("Unique ID"), auto=True, version=4, help_text=_('unique id'))
    household = JSONField(_("JSON for a single household"), help_text=_('Contains data for a single Household'),
                          blank=True, null=False)
    status = models.IntegerField(_("Processing status"), choices=IMPORT_STATUS)
    mobile_upload_log = models.ForeignKey(MobileUploadLog,
                                          verbose_name=_('Upload session where the Household is coming from'),
                                          related_name='mobile_upload_logs')
    processed_datetime = models.DateTimeField(null=True, blank=True,
                                              verbose_name=_('Timestamp when household was processed'))
    error = models.TextField(_("Error trace for this import"), help_text=_('Contains the exception of why this household cannot be imported'),
                             blank=True, null=False)

    def save_error(self, error):
        self.status = MobileUploadHouseholdLog.ERROR
        self.error = error
        self.processed_datetime = timezone.now()
        self.save()

    def save_imported(self):
        self.status = MobileUploadHouseholdLog.IMPORTED_TO_SCOPE
        self.processed_datetime = timezone.now()
        self.save()

    def save_duplicate(self):
        self.status = MobileUploadHouseholdLog.DUPLICATE
        self.processed_datetime = timezone.now()
        self.save()

任何见解都将受到赞赏。谢谢

0 个答案:

没有答案