У меня есть такие модели (peewee 2.10
):
class LegalAct(Model):
start_date = DateField()
expiration_date = DateField()
class SomeModel(Model):
name = CharField()
legal_act = ForeignKeyField(LegalAct)
class OtherModel(Model):
name = Charfield()
some_model = ForeignKeyField(SomeModel)
starting_legal_act = ForeignKeyField(LegalAct)
closing_legal_act = ForeignKeyField(LegalAct)
class ExtraModel(Model):
value = IntegerField()
other_model = ForeignKeyField(OtherModel)
starting_legal_act = ForeignKeyField(LegalAct)
closing_legal_act = ForeignKeyField(LegalAct)
Учитывая список SomeModle.id
с и date
(для фильтрации LegalAct
), я хочу получить следующие данные:
SomeModel.name
OtherModel.name
OtherModel.starting_legal_act.start_date
ExtraModel.starting_legal_act.start_date
ExtraModel.value
Проблема в том, что я не могу понять, как перейти к OtherModel.starting_legal_act.start_date
и ExtraModel.starting_legal_act.start_date
- я могу получить только id
соответствующих моделей и извлечь данные в последующих запросах.
Мой текущий код такой:
other_model_legal_act = get_other_legal_act(date) # a query
extra_model_legal_act = get_extra_legal_act(date) # a query
data = OtherModel.select(
SomeModel.name
OtherModel.name
OtherModel.starting_legal_act.alias('date_1') # I get `id`, but want date
ExtraModel.starting_legal_act.alias('date_2') # I get `id`, but want date
ExtraModel.value
).join(SomeModel).switch(OtherModel).join(ExtraModel).where(
(OtherModel.legal_act == other_model_legal_act) &
(ExtraModel.legal_act == extra_model_legal_act) &
(SomeModel.id.in_(id_list))
)
Мне нужно заменить эти строки кодом, который будет возвращать фактические даты вместо идентификаторов записей:
OtherModel.starting_legal_act.alias('date_1') # I get `id`, but want date
ExtraModel.starting_legal_act.alias('date_2') # I get `id`, but want date