我会解释一个不同的问题,但我认为解决方案可能需要研究。
有一次我在做一个可视化数据的项目,我需要一个非常大的表来存储所有可视化的所有数据。结果证明这是一个大问题,因为我必须做一些Model.objects.filter(visualization=5)
不太优雅且效率不高的事情。
为了让事情变得更简单、更高效,我最终动态创建了动态模型。本质上,我会动态地在数据库中创建一个单独的表,然后只在其中存储一个可视化的数据。我的代码是这样的:
def get_model_class(table_name):
class ModelBase(ModelBase):
def __new__(cls, name, bases, attrs):
name = '{}_{}'.format(name, table_name)
return super(ModelBase, cls).__new__(cls, name, bases, attrs)
class Data(models.Model):
# fields here
__metaclass__ = ModelBase
class Meta(object):
db_table = table_name
return Data
dynamic_model = get_model_class('foo')
这对我的目的很有用,因为它允许查询更快,但回到你的问题我认为这样的事情可能很有用,因为这将确保每个客户端的数据不仅通过外键分开,而且实际上是分开的在数据库中。
使用此方法非常简单,除非在使用模型之前,您必须调用该函数来为每个客户端获取它。为了使事情更高效,您可以缓存/记忆函数调用的结果,这样它就不必多次重新计算同一事物。