Comments (2)
I'm not sure if this is related, but rather than opening a new issue I will mention it here.
It appears that in 1.x of django-ninja, possibly because of what was mentioned above, the resolvers are called also on request input validation. Is this intended behaviour? I'm having trouble following this area in the documentation.
In my case, I can also determine if I'm dealing with input data or model serialization by checking if 'response_status' in context
but this seems like a hack.
from django-ninja.
Same here. I had a test that was running fine with version django-ninja 0.22.1 and pydantic 1.10.13 but is now failing with ninja 1.1.0 and pydantic 2.5.3.
I try to condense it into a short example with the following highlights:
- a model with m2m relations for categories and tags (tags implemented with django-taggit)
- the schema uses ModelSchema and includes the fields "categories" and "tags" but also has resolvers for both to output a list of complex objects for categories with ID and additional attributes, and a list of strings for the tags in case of GET requests.
- the PUT request uses the same model schema and this would work previously but now the payload for tags and categories is always an empty list.
class Contact(Model): # Django Model
categories = ManyToManyField(...)
tags = DalTaggableManager() # taggit
# other fields omitted
class ContactSchema(ModelSchema):
# other fields omitted
categories: List[CategorySchema] = []
tags: List[str] = []
model_config = ConfigDict(
alias_generator=to_camel_case,
populate_by_name=True
)
class Meta:
model = Contact
fields = [
'categories',
'tags',
]
@staticmethod
def resolve_categories(obj):
LOGGER.debug('>>>>>>>>>>>>>>>>>< RESOLVE CATS %s', obj)
return obj.categories_display()
@staticmethod
def resolve_tags(obj):
LOGGER.debug('>>>>>>>>>>>>>>>>>< RESOLVE TAGS %s', obj)
return list(obj.tags.values_list('name', flat=True))
@contacts_router.put('/me/', response={200: ContactSchema, 401: str, 400: ContactErrorsSchema}, by_alias=True,
exclude_unset=True)
def put_current_user(request, payload: ContactSchema):
LOGGER.debug('>>>>>>>>>>>>>>< request %s %s', request.body, payload)
contact, unauth = get_contact_for_request(request)
The request contains the categories and tags. The resolvers get called and the obj
at this point is the request body as python dictionary. The calls to obj.categories_display
and obj.tags
at this point result in None
and as a consequence, the payload
contains only empty lists of categories and tags.
If this is now the new behaviour, a hint in the documentation would probably be helpful.
from django-ninja.
Related Issues (20)
- Overriding JSON schema title and summary without using `Field` HOT 1
- [BUG] CSRF Fails with Django Auth HOT 16
- [BUG] Order of operations affect response and request schemas HOT 1
- Documentation - link the schema article to the error article
- Add description to tags HOT 2
- Field order issue in JSON response HOT 1
- [BUG] Allow specifying field types for custom fields
- [BUG] The other API URLs work, but the openapi docs don't appear. HOT 5
- [BUG] Can't use parameter `keys`
- how to add a description for query params that shows in the generated docs?
- Field with list factory causes API docs to not load with non-serializable. HOT 2
- Annotate Decimal field does not supported "Unable to serialize unknown type: <class 'ellipsis'"
- Traversing the data structures to create an HTTP API client HOT 3
- how to use token ? HOT 1
- Path parameters, order matters HOT 3
- [BUG] Combining JWTAuth with django_auth only works in that order
- [BUG] Pydantic 2.7.0 incompatibily HOT 4
- [BUG] ModelSchema with ManyToManyField won't work under async views HOT 5
- How do you use aliases with nested objects
- [BUG] HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from django-ninja.