Python mapowanie obiektu na inną klasę po polu

0

Hej, robię sobie ćwieczenia z FastApi backendowe i utknęłam na zadaniu zmapowania obiektów po wspólnych wartościach pól klasy

Mam taką klasę Car w bazie danych i odpowiednik dla zwracania -> CarMapped

class Car(Model):
    id: int
    producent_id: int
    model_id: int
    owner_id: int
    engine_id: int
    state_id: int

# dalej

class EngineState(BaseModel):
    engine_id: int
    engine_type: str    # pole z klasy Engine
    state_id: int
    state_value: str    # pole z klasy State

class CarMapped(BaseModel):
    producent_id: int
    model_id: int
    owner_id: int
    engine_states: list[EngineState]

gdy wywołuję metodę z bazy danych, to dostaję takie obiekty:

cars = db.get_cars(owner_id: 1)

# przykładowe wartości
# id: 1, producent_id: 1, model_id: 1, owner_id: 1, engine_id: 1, state_id: 1
# id: 2, producent_id: 1, model_id: 1, owner_id: 1, engine_id: 2, state_id: 4
# id: 3, producent_id: 1, model_id: 1, owner_id: 1, engine_id: 4, state_id: 3
# id: 4, producent_id: 1, model_id: 1, owner_id: 1, engine_id: 7, state_id: 9
# id: 5, producent_id: 1, model_id: 1, owner_id: 1, engine_id: 23, state_id: 2

Jak połączyć te obiekty w jeden obiekt CarMapped (dla wspólnych: producent_id = 1, model_id = 1, owner_id = 1) tak aby miały listę
Odpowiednie wartości engine_type i state_type można pobrać metodami get_type_by_engine_id(id: int), get_state_by_state_id(id: int)
Umiem to tylko częściowo zrobić pętlą for, ale i tak nie dokońca :(

0
MajaWieczorkowska napisał(a):

Hej, robię sobie ćwieczenia z FastApi backendowe i utknęłam na zadaniu zmapowania obiektów po wspólnych wartościach pól klasy

Mam taką klasę Car w bazie danych i odpowiednik dla zwracania -> CarMapped

class Car(Model):
    id: int
    producent_id: int
    model_id: int
    owner_id: int
    engine_id: int
    state_id: int

# dalej

class EngineState(BaseModel):
    engine_id: int
    engine_type: str    # pole z klasy Engine
    state_id: int
    state_value: str    # pole z klasy State

class CarMapped(BaseModel):
    producent_id: int
    model_id: int
    owner_id: int
    engine_states: list[EngineState]

gdy wywołuję metodę z bazy danych, to dostaję takie obiekty:

cars = db.get_cars(owner_id: 1)

# przykładowe wartości
# id: 1, producent_id: 1, model_id: 1, owner_id: 1, engine_id: 1, state_id: 1
# id: 2, producent_id: 1, model_id: 1, owner_id: 1, engine_id: 2, state_id: 4
# id: 3, producent_id: 1, model_id: 1, owner_id: 1, engine_id: 4, state_id: 3
# id: 4, producent_id: 1, model_id: 1, owner_id: 1, engine_id: 7, state_id: 9
# id: 5, producent_id: 1, model_id: 1, owner_id: 1, engine_id: 23, state_id: 2

Jak połączyć te obiekty w jeden obiekt CarMapped (dla wspólnych: producent_id = 1, model_id = 1, owner_id = 1) tak aby miały listę
Odpowiednie wartości engine_type i state_type można pobrać metodami get_type_by_engine_id(id: int), get_state_by_state_id(id: int)
Umiem to tylko częściowo zrobić pętlą for, ale i tak nie dokońca :(

A po co chcesz to zrobić?

Tzn. rozumiem, że możesz chcieć pogrupować po trzech atrybutach, ale czemu chcesz mapować na klasy? Masz jakiś cel ku temu, czy robisz "tak bo tak"?

1 użytkowników online, w tym zalogowanych: 0, gości: 1