簡體   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