FastAPI ODMantic пытается получить доступ к индексам по «str»Python

Программы на Python
Ответить
Anonymous
 FastAPI ODMantic пытается получить доступ к индексам по «str»

Сообщение Anonymous »

У меня есть конечная точка API, чтобы позволить пользователю отправить форму, эта форма имеет некоторые вложенные объекты: < /p>

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

class FoundForm(Model):
contact_details: FoundContactDetails
...other fields...
Встроенная модель FoundContactDetails

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

class FoundContactDetails(EmbeddedModel):
name: str
phone_number: str
email: str
address: Optional[DetailedAddress] = None
bank_account: Optional[str] = None
bank_name: Optional[str] = None
the DeplicAddress

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

class DetailedAddress(EmbeddedModel):
street: str
ward: str
district: str
city: str
country: str
Я хочу позволить пользователю отправить форму с именем , phone_number, электронная почта , которые требуются. В то время как полевое поле, они могут либо опустить его, либо должны предоставить все поля Adder Abstic. Pre Class = "Lang-Py PrettyPrint-Override">

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

async def create_found_form(form_data: FoundFormCreate) -> FoundFormRead:
form = FoundForm(**form_data.model_dump())
return await engine.save(form)
FoundFormBase:

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

class FoundFormBase(BaseModel):
contact_details: FoundContactDetails #the embedded model at the top of this post
sudformcreate для проверки запросов, расширяйте от sudformbase выше:

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

class FoundFormCreate(FoundFormBase):
@field_validator('contact_details')
def validate_contact_details(cls, value):
if value.bank_account is not None and value.bank_name is None:
raise ValueError('Bank name is required if bank account is provided')
if value.address is not None:
if not all([value.address.street, value.address.ward, value.address.district, value.address.city, value.address.country]):
raise ValueError('All address fields (street, ward, district, city, country) are required if address is provided')
return value
Но когда пользователь отправляет форму с этим json, используя SwaggerUI, который автоматически генерируется FastAPI:

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

{
"contact_details": {
"name": "string",
"phone_number": "string",
"email": "string",
"address": {
"street": "string",
"ward": "string",
"district": "string",
"city": "string",
"country": "string"
},
"bank_account": "string",
"bank_name": "string"
}
}
Выдает ошибку, которая, по-видимому, происходит в поле адрес.

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

  "detail": "string indices must be integers, not 'str'"
удаление bank_account или оба bank_account и bank_name - это нормально, поскольку проверка работает правильно.
Спасибо за чтение. < /p>
Как я могу обрабатывать несколько вложенных объектов, особенно имеет некоторые необходимые и дополнительные микширование, также пусть объекты odmantic /pydantic Access ' Поля правильно.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ces-by-str
Ответить

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

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

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

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

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