-
-
Notifications
You must be signed in to change notification settings - Fork 8.7k
Closed
Labels
Description
This isn't a big problem, but I'm wondering if it's possible to keep the JSON output key ordering unaffected by the presence of a Pydantic @validator(...)? I like consistency. 🤷♂️
I have this pydantic model structure:
class IngredientBase(BaseIngredientMixin):
name: str = None
unit: str = None
unit_price: decimal.Decimal = None
flavour_warning: bool = None
@validator('unit')
def valid_units_only(cls, v):
choices = set(SingleIngredientTable.unit_choices.keys())
if v and v not in choices:
raise ValueError(f'must be one of {choices}')
return v
class IngredientIn(IngredientBase):
pass
class IngredientNew(IngredientIn):
name: str = ...
unit: str = ...
unit_price: decimal.Decimal = ...
class IngredientOut(IngredientBase, TestModelMixin, TimestampModelMixin, IDModelMixin):
pass
This will produce:
{
"unit": "IU",
"id": "sing_qOYSyqZhfOcJKHsfVz7tnfP6M",
"created": 1571357369,
"updated": 1571418480,
"is_test": false,
"name": "Vitamin C",
"unit_price": 10.568536363534536,
"flavour_warning": false
}
Without the validator, it produces what I would expect:
{
"id": "sing_qOYSyqZhfOcJKHsfVz7tnfP6M",
"created": 1571357369,
"updated": 1571418480,
"is_test": false,
"name": "Vitamin C",
"unit": "IU",
"unit_price": 10.568536363534536,
"flavour_warning": false
}
How can I continue to use @validators and maintain the expected JSON key ordering?
Edit: I can pull out the validator into a 'mixin' class that I apply ONLY to the IngredientIn and IngredientNew models (leaving IngredientOut untouched). But is that my only path here?
Reactions are currently unavailable