Как изменить дополнительное поле в модели ответа, чтобы различать, принадлежит ли элемент пользователю, в зависимости от объектов ORM
Я новичок в разработке бэкенда и хочу иметь дополнительное поле в ответе в зависимости от id пользователя. Проект представляет собой мини-приложение для электронной коммерции, где только владелец магазина может редактировать его содержимое. Когда фронтенд запрашивает GetAllShops, как я могу прикрепить булево поле типа is_owner для каждой сущности магазина, возвращаемой из sql alchemy ORM путем сравнения id магазина с id клиента? Заранее спасибо. Я использую Pydantic и FastAPI.
Вы можете сделать это с помощью корневого валидатора, который является наиболее мощным методом:
from pydantic import BaseModel, root_validator
class MyModel(BaseModel):
client_id: str
shop_id: str
is_owner: bool = False
# Root validators are executed during model instantiation
# before values are assigned
@root_validator(pre=True)
def check_if_owner(cls, values: dict):
if values['client_id'] == values['shop_id']:
values['is_owner'] = True
# All done
return values
Другим более тонким решением является использование обычного валидатора с доступом ко всем значениям класса. Это похоже на то, что описано выше, но специфично только для этого поля. (Примечание: этот метод может стать довольно сложным и запутанным, поэтому действуйте осторожно.)
from pydantic import BaseModel, validator
class MyModel(BaseModel):
client_id: str
shop_id: str
is_owner: bool = False
@validator('is_owner', always=True)
def check_if_owner(cls, value, values: dict):
if values['client_id'] == values['shop_id']:
return True
else:
return False