Я делаю интеграцию между Django и AWS Redshift для целей отчетности. До сих пор кажется, что джанго не преуспевает в этом. Одна из проблем, с которыми я столкнулся, заключается в том, что я должен установить альтернативный идентификатор типа для каждой модели, а не тип AutoField, потому что он не поддерживается в redshift. пока что так хорошо, но я думал Если я уже делаю суперкласс для всех моделей, которые я собираюсь использовать, я буду менять имена таблиц на этом пути, мне не нравятся имена по умолчанию, которые django дает для его моделей в db (имя_пользователя__model_name). Мне удалось сделать это для каждой вспомогательной модели (см. Ниже). но я хотел бы объявить его динамически в BaseModel таким образом, чтобы каждая вспомогательная модель получала свое собственное имя таблицы в соответствии с его именем класса.Django model db_table наследование/инъекция
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)
Возможно ли такое?
Вы правы насчет id, спасибо. Можете ли вы сослаться на любой ресурс относительно переопределения метакласса? – MentalBrake