FastAPI - загрузка файлов с полями других моделей [дубликат]Python

Программы на Python
Ответить
Anonymous
 FastAPI - загрузка файлов с полями других моделей [дубликат]

Сообщение Anonymous »

У меня есть небольшой проект в FastApi, и я хочу загрузить файл вместе с моделью. У меня следующая модель (стандартный заказ):

Код: Выделить всё

class Order(Base):
__tablename__ = "orders"

id = Column(Integer, primary_key=True, index=True)
name = Column(String, unique=True, index=True)
is_shipped = Column(Boolean)
filename = Column(String)
и базовые схемы (для проверки данных):

Код: Выделить всё

from pydantic import BaseModel

class OrderBase(BaseModel):
name: str

class OrderCreate(OrderBase):
filename: str

class Order(OrderBase):
id: int
is_shipped: bool

class Config:
orm_mode = True
У меня также есть два основных маршрутизатора: один для загрузки файлов и один для загрузки заказов. (В идеале я хотел бы иметь два маршрутизатора, потому что это дает мне больше гибкости)

Код: Выделить всё

file_list = {}

@app.post("/upload-files/")
async def upload_files(files: List[UploadFile] = File(...)):
file_ids = []
for file in files:
file_id = str(uuid4())
file_ids.append(file_id)

file_list[file_id] = file.filename
return {"file_ids" : file_ids}

@app.post("/submit-form/")
async def submit_form(data: str = Form(...), file_ids: List[str] = Form(...)):
return {"data" : data, "file_references" : [file_list[file_id] for file_id in file_ids if file_id in file_list]}
Основная сложность в том, что для загрузки заказа из вложений мне нужно сначала связаться с одним роутером, а потом с другим. Я хотел бы иметь возможность сделать все это одновременно. Как этого добиться?
Как бы выглядела форма, в которую я мог бы загрузить модель и файл одновременно?
Я пытаюсь сделать что при загрузке модели sqlalchemy одновременно загружается файл вложения.

Подробнее здесь: https://stackoverflow.com/questions/774 ... els-fields
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»