-
Notifications
You must be signed in to change notification settings - Fork 40
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Marshmallow Two-way Nesting Schemas Validation #55
Comments
In order to help, you can find attached the basic configuration I am using : thank you, |
@froggylab Were you able to find a solution/workaround for this? |
@v1shwa The only two possibilities I found out were :
|
Thanks for quick response @froggylab . I don't think asking frontend to make another call is an option. I am planning to look into the source & see if we can tweak something. Hopefully, I will raise a PR for this soon. |
Just ran into this myself, for anyone interested here's my workaround, exploiting the fact that marshmallow calculates these string-name-defined schema lazily and stores the result on the def unpack_nested(val, api, model_name: str = None, operation: str = "dump"):
if val.nested == "self":
return unpack_nested_self(val, api, model_name, operation)
+ if isinstance(val.nested, str):
+ parent = val.parent.parent if is_list_field(val.parent) else val.parent
+ parent_name = get_default_model_name(parent)
+ model_name = val.nested + '-in-' + parent_name
+ nested_schema = val.schema
+ else:
model_name = get_default_model_name(val.nested)
+ nested_schema = val.nested
if val.many:
return fr.List(
fr.Nested(
- map_type(val.nested, api, model_name, operation), **_ma_field_to_fr_field(val)
+ map_type(nested_schema, api, model_name, operation), **_ma_field_to_fr_field(val)
)
)
return fr.Nested(
- map_type(val.nested, api, model_name, operation), **_ma_field_to_fr_field(val)
+ map_type(nested_schema, api, model_name, operation), **_ma_field_to_fr_field(val)
) I additionally change the model name to This method can be monkey-patched in via This probably needs some cleanup before being PR-ready material (not even sure if this is a good approach), but it might be a usable workaround for anyone who needs it in the interim. Bonus: hacky workaround for pluck fields by replacing the first half of that update_nested with if isinstance(val.nested, str):
nested_schema = val.schema
else:
nested_schema = val.nested()
plucked_field = nested_schema.fields[val.field_name] (and pass |
In order to avoid circular import in a flask/marshmallow project, it's possible to reference the Nested field by using its name (as described here https://marshmallow.readthedocs.io/en/latest/nesting.html#two-way-nesting)
Unfortunately, flask_accepts doesn't support it :
A change will also be necessary for the method map_type() since you have to give the object iteself while it's not yet charged.
Can you please add the possibility to support this configuration ?
Thank you
The text was updated successfully, but these errors were encountered: