-
Notifications
You must be signed in to change notification settings - Fork 21
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
Resolver gets called twice #67
Comments
@geclick Sorry I didn't get notified of this issue on time. I am just seeing it now. I am currently looking into it at the moment |
@geclick the problem is the You can only solve this problem using pydantic model validator at mode='before'. Check the example below. class ModelAuthReadSchema(ModelSchema):
permissions: List[str] | None
class Meta:
model = AuthModel
fields = ['id', 'username', 'first_name', 'last_name', 'email']
@model_validator(mode="before")
def validate_permission_list(cls, values: DjangoGetter) -> typing.Any:
values = values._obj
if isinstance(values, dict):
# values will have ['id', 'username', 'first_name', 'last_name', 'email']
user = None # add functionality to get the user
permissions = get_permissions(user)
values.update(permissions=permissions)
return values |
tnks |
@geclick can you close this issue if the problem is resolved? |
The library is not behaving as documented. The documentation seems sane to me, so I think it's the library that's broken. But minimally, the documentation for resolvers needs to be updated: https://django-ninja.dev/guides/response/#resolvers It says that a static resolver is called with a Django model, but it's not; it's called twice: once with a Django model and once with a Pydantic model. The second part of that section is also incorrect; if you try to define a normal method resolver(without Edit: Just realized this is not the Django-ninja repo. 😂 But it might indicate that the upstream issue is in Django-ninja rather than Pydantic. |
I am adding a 'user' key to the token claims with the user data including its permissions. Following exactly this I get the tokens with no problem. But resolving the permissions raises a ValidationError, and I realized that the resolver gets called twice:
-first time the obj is a User instance and context is None, so no problem for getting the permission list
-the second time obj is not a User but a ModelAuthReadSchema instance and context is not None but its user is a AnonymousUser, and here comes the errors
this is my schema for User where AuthModel is just get_user_model()
get_permissions is a custom function for getting just business-related permissions
this is the error:
this would be the desired output:
The text was updated successfully, but these errors were encountered: