GithubHelp home page GithubHelp logo

Comments (4)

oxan avatar oxan commented on May 28, 2024

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.

MaksimZayats avatar MaksimZayats commented on May 28, 2024

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.

oxan avatar oxan commented on May 28, 2024

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.

MaksimZayats avatar MaksimZayats commented on May 28, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.