Esta es la primera vez que uso FastApi el marco de Python, y estoy tratando de entender cómo configurar correctamente mis tablas y la lógica para poder realizar una solicitud posterior que cree una instancia de la tabla que tiene la clave externa.
class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True, index=True) first_name = Column(Text, nullable=False) last_name = Column(Text, nullable=False) class Post(Base): __tablename__ = "posts" id = Column(Integer, primary_key=True, index=True) user_id = Column(Integer, ForeignKey("users.id"), nullable=False) class UserBase(BaseModel): name: str class Posts(BaseModel): id: int user_id: int class Config: orm_mode = True class User(UserBase): id: int class Config: orm_mode = True def create_post(db: Session, user_id: int, post: schemas.Post): get_user_id = db.query(models.User).filter(models.User.id == user_id).first() post = models.Post( id=post.id, user_id=get_user_id.id, ) db.add(post) db.commit() db.refresh(post) return post router = APIRouter() @router.post("/posts.", response_model=Post) async def create_post(user_id, post: Post, db): return repository.create_post(db=db, user_id=user_id, post=post) try { const url = "http://localhost:8000/posts"; const data = {"user_id": 2}; const response = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(data) }) ... El user_id probado anteriormente en el front-end existe en la base de datos y el punto final para crear un usuario funciona bien, pero solo el que crea una post que pertenece a un usuario específico no funciona, devuelve un 422 (Unprocessable Entity)
¿Hay algo que estoy haciendo mal?
Su punto final actualmente requiere 2 cosas: un user_id de usuario y datos de un esquema de Post . (También solicita db que no sé cómo administra su acceso a su db) ( create_post(user_id, post: Post, db) )
Por lo tanto, su cuerpo debe contener los valores de Publicación, a saber: id y user_id . En este punto, nos damos cuenta de que pregunta dos veces en su punto final user_id . Por lo tanto, puede eliminar su primer user_id de usuario de su punto final, ya que está incluido en su esquema de Post .
En el front-end, sus data contienen solo un dato: {"user_id": 2} . Falta el valor de id que se solicita a través de su esquema de Post . Entonces, dado que falta un dato, se genera un error 422.