繁体   English   中英

pydantic.error_wrappers.ValidationError:For Trip type=value_error.missing 的 11 个验证错误

[英]pydantic.error_wrappers.ValidationError: 11 validation errors for For Trip type=value_error.missing

我的 pydantic 模式出现此错误,但奇怪的是它正确生成了 object,并将其发送到 SQLAlchemy 模型,然后它突然对 model 中的所有元素抛出错误。

response -> id
  field required (type=value_error.missing)
response -> date
  field required (type=value_error.missing)
response -> time
  field required (type=value_error.missing)
response -> price
  field required (type=value_error.missing)
response -> distance
  field required (type=value_error.missing)
response -> origin_id
  field required (type=value_error.missing)
response -> destination_id
  field required (type=value_error.missing)
response -> driver_id
  field required (type=value_error.missing)
response -> passenger_id
  field required (type=value_error.missing)
response -> vehicle_id
  field required (type=value_error.missing)
response -> status
  field required (type=value_error.missing)

我必须说所有的领域都应该有价值。 而且错误跟踪不引用我的代码的任何部分,所以我什至不知道在哪里调试。 我是 SQLAlchemy/pydantic 的菜鸟

这是代码的一些部分

class Trip(BaseModel):
    id: int
    date: str
    time: str
    price: float
    distance: float
    origin_id: int
    destination_id: int
    driver_id: int
    passenger_id: int
    vehicle_id: int
    status: Status

    class Config:
        orm_mode = True
class TripDB(Base):
    __tablename__ = 'trip'
    __table_args__ = {'extend_existing': True}
    id = Column(Integer, primary_key=True, index=True)
    date = Column(DateTime, nullable=False)
    time = Column(String(64), nullable=False)
    price = Column(Float, nullable=False)
    distance = Column(Float, nullable=False)
    status = Column(String(64), nullable=False)

    origin_id = Column(
        Integer, ForeignKey('places.id'), nullable=False)
    destination_id = Column(
        Integer, ForeignKey('places.id'), nullable=False)

    origin = relationship("PlaceDB", foreign_keys=[origin_id])
    destination = relationship("PlaceDB", foreign_keys=[destination_id])

    driver_id = Column(
        Integer, ForeignKey('driver.id'), nullable=False)
    vehicle_id = Column(
        Integer, ForeignKey('vehicle.id'), nullable=False)
    passenger_id = Column(
        Integer, ForeignKey('passenger.id'), nullable=False)
def create_trip(trip: Trip, db: Session):
    origin = db.query(models.PlaceDB).filter(models.PlaceDB.id == trip.origin_id).first()
    destination = db.query(models.PlaceDB).filter(models.PlaceDB.id == trip.destination_id).first()
    db_trip = TripDB(
        id=(trip.id or None),
        date=trip.date or None, time=trip.time or None, price=trip.price or None, 

    distance=trip.distance or None, 
            origin_id=trip.origin_id or None, destination_id=(trip.destination_id or None), status=trip.status or None, 
            driver_id=trip.driver_id or None, passenger_id=trip.passenger_id or None, vehicle_id=trip.vehicle_id or None, origin=origin, destination=destination)
    try:
        db.add(db_trip)
        db.commit()
        db.refresh(db_trip)
        return db_trip

    except:
        return "Somethig went wrong"

这似乎是 pydantic 模型上的一个错误,它也发生在我身上,我无法修复它,但实际上如果你只是跳过路线中的类型检查,它工作正常

您的架构和 create_trip function 似乎存在冲突。 您是否检查过是否将正确的参数传递给您的架构? 您已将大多数字段定义为不可为空,并且在 db.add() 命令中将 None 作为替代值传递。

我的代码也有类似的问题,我认为 schema 和 server.py 之间的命名和类型约定。 在两个文件中匹配字段名称和类型后,我解决了所需字段的错误(type=value_error.missing)。

# project/schema.py
from pydantic import BaseModel

# here I had made mistake by using target_URL in server.py
# variable name and type should be same in both schema and server
class URLBase(BaseModel):
    target_url: str


class URL(URLBase):
    is_active: bool
    clicks: int

    class Config:
        orm_mode = True


class URLInfo(URL):
    url: str
    admin_url: str
# project/server.py
@app.post('/url', response_model=schema.URLInfo)
def create_short_url(url: schema.URLBase, db: Session = Depends(get_db)):
    if not validators.url(url.target_url):
        raise bad_request_message(message="Your provided URL is not valid!")
    chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    key = "".join(secrets.choice(chars) for _ in range(5))
    secret_key = "".join(secrets.choice(chars) for _ in range(8))
    db_url = models.URL(target_url=url.target_url, key=key, secret_key=secret_key)
    db.add(db_url)
    db.commit()
    db.refresh(db_url)
    db_url.url = key
    db_url.admin_url = secret_key

    return db_url

请检查退货声明,我有类似的问题,并通过更正我的退货声明解决了问题。 我在 create_trip function 中看到返回语句丢失或错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM