为了报告的目的,我正在 Django 和 AWS Redshift 之间进行集成。到目前为止,感觉 django 的表现并不好。我遇到的一个问题是我必须为每个模型设置一个替代类型 id,而不是 AutoField 类型,因为它在 redshift 中不受支持。到目前为止一切都很好,但我想如果我已经为我要使用的所有模型做一个超类,我会在途中更改表名,我不喜欢 django 提供的默认名称它是数据库中的模型(app_name__model_name)。我设法为每个子模型做到了(见下文)。但我想在 BaseModel 中动态声明它,每个子模型将根据它的类名接收它自己的表名。
class BaseModel(Model):
id = CharField(primary_key=True, max_length=36)
class Meta:
abstract = True
def __init__(self, *args, **kwargs):
super(RedshiftBaseModel, self).__init__(*args, **kwargs)
self.id = str(uuid4())
class SubModel1(BaseModel):
class Meta(BaseMode.Meta):
db_table = 'SubModel1'
field1 = CharField(max_length=64, primary_key=True)
class SubModel2(BaseModel):
class Meta(BaseMode.Meta):
db_table = 'SubModel2'
field2 = CharField(max_length=64, primary_key=True)
这样的事情甚至可能吗?