@tursoff

FastAPI: как создать две записи, которые имеют свои сервисы, в одном сервисе?

Всем привет, такой вопрос возник, не знаю как правильно организовать все это.

У меня есть модели, DTO и сервисы `user` и `property`:
# model
class User(Base):
    __tablename__ = 'user'

    id: Mapped[int] = mapped_column(Integer, primary_key=True, index=True)
    username: Mapped[str] = mapped_column(String(30), unique=True, index=True)
    property: Mapped['Property'] = relationship(back_populates='user')

class Property(Base):
    __tablename__ = 'property'

    id: Mapped[int] = mapped_column(Integer, primary_key=True, index=True)
    points: Mapped[int] = mapped_column(Integer, default=5)
    user_id: Mapped[int] = mapped_column(ForeignKey('user.id'), index=True)
    user: Mapped['User'] = relationship(back_populates='property')


# DTO
class User(BaseModel):
    username: str = Field(min_length=3, max_length=20)

class Property(BaseModel):
    points: int = Field(default=5)


# service
def create_user(data: user.User, db: Session):
    user = User(username=data.username)

    try:
        db.add(user)
        db.commit()
        db.refresh(user)
    except Exception as e:
        print(e)

    return user

def create_property(data: property.Property, db: Session):
    property = Property(
        points=data.points,
        user_id=data.user_id
    )

    try:
        db.add(property)
        db.commit()
        db.refresh(property)
    except Exception as e:
        print(e)
    
    return property


Нужно сделать так, что бы после создания `user` происходило создание `property`, которое будет ссылаться на `user`.
Подскажите, как действовать или простой пример наведите)
  • Вопрос задан
  • 117 просмотров
Решения вопроса 1
@diman40
Python junior
try
 user = ...
 db.session.add(user)
 db.session.flush((user,))
 property.user_id = user.id
 db.session.add(property)
 db.session.commit()
except
...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы