Docs: example in "DTO: Excluding fields" is not clear
sobolevn opened this issue · 1 comments
Summary
Example:
config = DTOConfig(
exclude={
"id",
"address.id",
"address.street",
"pets.0.id",
"pets.0.user_id",
}
)
Later is specifies:
and "pets.0.id" and "pets.0.user_id" represent fields of the Pets objects nested within the list of User.pets.
and
Given a generic type, with an arbitrary number of type parameters (e.g.,
GenericType[Type0, Type1, ..., TypeN])
, we use the index of the type parameter to indicate which type the exclusion should refer to. For example, a.0.b, excludes the b field from the first type parameter of a, a.1.b excludes the b field from the second type parameter of a, and so on.
But I still don't understand what pets.0.id
means :)
Here are my questions:
- Is
pets.0
an index of an object? For example in[Pet(id=1, name="Dog"), Pet(id=2, name="Cat")]
will both of them not have anid
? Or onlyDog
? - This sentence confuses me even more:
Given a generic type, with an arbitrary number of type parameters (e.g.,
GenericType[Type0, Type1, ..., TypeN])
, we use the index of the type parameter to indicate which type the exclusion should refer to
Because neither User
or Pet
is generic. They don't have any type params.
I don't have any proposals on how to fix this, because I don't understand how it works :)
Note
While we are open for sponsoring on GitHub Sponsors and
OpenCollective, we also utilize Polar.sh to engage in pledge-based sponsorship.
Check out all issues funded or available for funding on our Polar.sh dashboard
- If you would like to see an issue prioritized, make a pledge towards it!
- We receive the pledge once the issue is completed & verified
- This, along with engagement in the community, helps us know which features are a priority to our users.
Adding a partial explanation with a sample (and incomplete) model.
class Pets(Base):
name: Mapped[str]
user_id: Mapped[UUID] = mapped_column(ForeignKey("user.id"))
class User(Base):
pets: Mapped[list[Pets]] = relationship(info=dto_field("read-only"))
UserDTO = SQLAlchemyDTO[User]
config = DTOConfig(
exclude={
"id",
"address.id",
"address.street",
"pets.0.id",
"pets.0.user_id",
}
)
ReadUserDTO = SQLAlchemyDTO[Annotated[User, config]]
Is pets.0 an index of an object? For example in [Pet(id=1, name="Dog"), Pet(id=2, name="Cat")] will both of them not have an id? Or only Dog?
Both of them.
This sentence confuses me even more:
The 0
in pets.0.id
is not indicative of the index in which it has to exclude an attribute, rather it indicates the index of the type in list[Pets]
(because this is the type of User.pets
), so 0 here refers to Pets
.