问题::我有一个模型,例如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
我知道,对于第二行代码,我不会获得存储在新表中的数据。
答案 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'