문제 설명
날짜 시간에 대한 ValidationError (ValidationError for datetime)
안녕하세요, 긴 글 읽어주셔서 감사합니다. FastAPI‑SQLAlchemy‑PostgresSQL을 배우고 있습니다. 튜토리얼을 따라 데모 프로젝트를 코딩하고 있습니다. 내 데이터베이스는 다음과 같이 생성됩니다.
CREATE TABLE posts (
id SERIAL PRIMARY KEY,
title text,
content text,
owner_id integer REFERENCES users(id),
date_created timestamp without time zone,
date_last_updated timestamp without time zone
);
‑‑ Indices ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑
CREATE UNIQUE INDEX posts_pkey ON posts(id int4_ops);
내 SQLAlchemy 모델은 다음과 같습니다.
class Post(Base):
__tablename__ = 'posts'
id = Column(Integer, primary_key=True, index=True)
title = Column(String, index=True)
content = Column(String, index=True)
owner_id = Column(Integer, ForeignKey('users.id'))
date_created = Column(DateTime, default=dt.datetime.now)
date_last_updated = Column(DateTime, default=dt.datetime.now)
owner = relationship("User", back_populates="posts")
Pydantic 스키마는 다음과 같습니다.
6class PostBase(BaseModel):
title: str
content: str
class PostCreate(PostBase):
pass
class Post(PostBase):
id: int
owner_id: int
date_create: dt.datetime
date_last_updated: dt.datetime
class Config:
orm_mode = True
마지막으로 다음과 함께 게시:
def create_post(db: Session, post: schemas.PostCreate, user_id: int):
post = models.Post(**post.dict(), owner_id=user_id)
db.add(post)
db.commit()
db.refresh(post)
return post
@app.post("/users/{user_id}/posts", response_model=schemas.Post)
def create_post(user_id: int, post: schemas.PostCreate, db: Session = Depends(get_db)):
user = crud.get_user(user_id=user_id, db=db)
if user is None:
raise HTTPException(status_code=404, detail="User not found")
return create_post(db=db, post=post, user_id=user_id)
게시물이 데이터베이스에서 올바르게 생성되었음을 알 수 있습니다. | 아이디 | title|content|owner_id|date_created |date_last_updated | | ‑‑ | ‑‑‑‑‑|‑‑‑‑‑‑‑|‑‑‑‑‑‑‑‑|‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑| ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑| | 3 | 안녕 |hi |3 |2021‑10‑08 03:00:43.731416|2021‑10‑08 03:00:43.73143|
하지만 콘솔은 다음 오류를 출력하고 API에서 JSON이 반환되지 않습니다.
참조 솔루션
방법 1:
pydantic.error_wrappers.ValidationError: 1 validation error for Post
response ‑> date_create
field required (type=value_error.missing)
Here is your error, you aren't filling one field, and is required for the form.
Check if date_created
is required in your form.