Comments (4)
Without checking for Annotated types, I got this error:
I don't think this has anything to do with Annotated
types, but instead with InMemoryUploadedFile
not being a recognized type. Something like Annotated[int]
should work fine already.
I was wondering if it's possible to implement discovery of fields from
Annotated[...]
on your side.
It's certainly possible, but I think the more important question is whether it's desirable. There's already support for specifying the serializer field type in the dataclass definition like this:
@dataclass
class UploadDocumentRequest:
file: InMemoryUploadedFile = dataclasses.field(metadata={'serializer_field': fields.FileField()})
I suppose it's a bit more verbose, but it's also more generic: you can also add a serializer_kwargs
key in the metadata to specify any arguments for the serializer field, which is harder to do with type annotations. If the verbosity bothers you, it's also possible to define a simple helper function to abbreviate it.
from djangorestframework-dataclasses.
you can also add a
serializer_kwargs
key in the metadata to specify any arguments for the serializer field, which is harder to do with type annotations.
It is also possible with Annotated
because it's not an annotation, but an instance of the field itself:
@dataclasses.dataclass
class Person:
# email: str = dataclasses.field(metadata={'serializer_field': fields.EmailField()})
email: Annotated[str, fields.EmailField()]
# age: int = dataclasses.field(metadata={'serializer_kwargs': {'min_value': 0}})
age: Annotated[int, fields.IntegerField(min_value=0)]
from djangorestframework-dataclasses.
It is also possible with
Annotated
because it's not an annotation, but an instance of the field itself:
Ah yeah, that's true, though it's a bit more limited, as it requires you to specify all the required arguments of the field, instead of just the ones you want to override. My point remains standing though, we already have a way to override fields within the dataclass declaration, and I don't see a good reason to add another one (yet).
from djangorestframework-dataclasses.
I don't see a good reason to add another one (yet).
In my case, I have a common type that used between couple serializers:
DocumentsType: TypeAlias = Annotated[
list[models.Document],
PrimaryKeyRelatedField(
queryset=models.Document.objects.filter(deleted_at=None),
many=True,
),
]
@dataclass
class A:
documents: DocumentsType
@dataclass
class B:
documents: DocumentsType
from djangorestframework-dataclasses.
Related Issues (20)
- TYPE_CHECKING imports result in error on type evaluation HOT 8
- Nesting dataclass serializer inside regular serializer can result in <class 'rest_framework.fields.empty'> for optional fields HOT 3
- "Invalid data. Expected a dictionary, but got <dataclass.type>" HOT 2
- bool field with default of True actually defaults to False when using QueryDict HOT 4
- Support union types and maybe other corner cases HOT 3
- Adding support for dataclass Union field HOT 8
- Mypy error: Type argument "X" of "DataclassSerializer" must be a subtype of "Dataclass" HOT 3
- Bug with @swagger_auto_schema in drf-yasg HOT 1
- Support for types like frozenset? HOT 8
- Serializer initializing dataclass with non init fields
- Why lock on dataclass?
- DataclassListSerializer can't deserialize objects HOT 2
- DataclassSerializer fails with `source="*"` embedded serialiser fields because it requires Meta.dataclass HOT 7
- Implement strict de-serialization option HOT 3
- Version 1.3.0 wheel package is missing `py.typed` file HOT 2
- Populate help_text on serializer HOT 4
- PEP 695 type alias support
- `django-stubs` breaks type checking of `DataclassSerializer.validated_data` HOT 6
- Use 'source' to determine which fields should be autogenerated HOT 2
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 djangorestframework-dataclasses.