-
-
Notifications
You must be signed in to change notification settings - Fork 7k
Add support for source with attributes in extra_kwargs of ModelSerializer #9077
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
base: master
Are you sure you want to change the base?
Add support for source with attributes in extra_kwargs of ModelSerializer #9077
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
could you please add proper test cases to validate the changes proposed?
___________________________________ summary ____________________________________ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
that was a nice example
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
And this should also require documentation update as far as I can understand!
b10dfc2
to
c1ccc37
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
does this change conform with the principle of adding compatibility with django? I'm not fully convinced about the merit of the new change
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
I think this is still relevant and shouldn't be marked as stale. |
rest_framework/serializers.py
Outdated
if attr not in attr_info.relations: | ||
break |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This seems to cause trailing attributes to be ignored if they are "after" other relation attributes, but are not a relation themselves. Is this intended?
If so, I think this scenario should also have a test case.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is not really intended. Is it possible to have attributes other than relations with sufficient information in this function to be able to follow them? As far as I know, this isn't the case, so I just did it this way. It's also possible that I misunderstood your comment
@auvipy Do you know why the bot doesn't remove stale label when there is a new comment? |
@BergLucas Hey 👋🏻 Is it possible for you to rebase this branch from the latest main, so it won't be closed as stale and we can push for another tour of review & testing? Thanks in advance. |
…://github.com/BergLucas/django-rest-framework into improvement/source-attributes-in-extra_kwargs
Hi @ulgens , Thanks for your reviews! I've rebased the branch and responded to the comments. (Sorry for the delay, I've been quite busy these last few weeks.) |
refs #4688
Description
Hello dear maintainers, it's my first contribution to django rest framework so I hope I didn't do anything wrong.
In the pull request referenced above, there is someone that mentioned that we could not use source with attributes in extra_kwargs of a ModelSerializer.
For example, the following code would create an error:
I think it could be a very interesting feature because at the moment, when we have a foreign key to another model, we're obliged to specify the fields explicitly in the serializer. However, this means that if we have special validators on the fields of our model, we're obliged to put them back on the serializer fields.
For example, the
username
field of Django's defaultUser
has a special validator so if we just define a basicCharField
, it would not validate the data the same way as the model would validate it:This could create a difference between the way the model validates data and the way the serializer validates data if we forgot a validator or if we change the model without changing the serializer.
In this pull request, I added this feature so that we could just specify the model field we want in the source of extra_kwargs and it will generate the right field on the serializer.
The code may seem a little odd, but I've tried to keep the changes in one place only. I've also tried to maintain a good error message so that, if at any point the path to the field is wrong, it returns the full path in the error message and not just part of it.
Thanks for reading and please let me know if there are any changes that could be made.