如何根据查询中提供的日期时间对Django模型使用不同的数据库表?

时间:2019-02-08 08:03:10

标签: django postgresql

问题::我有一个模型,例如Location,它具有大量的行,并且对该模型的任何查询都需要花费不合理的时间来完成。

我当时正在考虑为此模型使用新表,这将使我的应用能够将将来的条目存储到该新表中。此外,当应用程序使用created列查询旧数据时,它会与模型中的硬编码日期时间值进行比较,并确定要用于查询的表。

是否可以为这种用例建立模型?

1. Location.objects.create(lat='zzzz', lng='zzzzz')  <-- Uses new table
2. Location.objects.filter(created__date__gte=zz-zz-zzzz)  <-- Uses old table

我知道,对于第二行代码,我不会获得存储在新表中的数据。

1 个答案:

答案 0 :(得分:0)

您可以尝试定义自定义管理器,该管理器将在新数据库中插入数据。我还没有测试代码,但是应该是这样的。

from django.db import models

class LocationBase(models.Model):
    field = models.CharField(max_length=100)

    class Meta:
        abstract = True

class ProxyLocationManager(models.Manager):
    def create(self, **data):
        return NewLocation.objects.create(**data)
class Location(LocationBase):
    objects = ProxyLocationManager()

class NewLocation(LocationBase):
    class Meta(LocationBase.Meta):
        db_table = 'location_new'