-
-
Notifications
You must be signed in to change notification settings - Fork 7k
Fixed #5363 -- HTML5 datetime-local valid format HTMLFormRenderer #9365
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: main
Are you sure you want to change the base?
Conversation
Hi @auvipy! Following your comment on #5363 (comment) I ask if you could do the review! Thank you! |
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. |
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.
please address the review comment
Thanks @auvipy! I'll do it! |
Just an update here. I'm still active! I'll do as soon as possible |
I finally did it, sorry for the long delay! |
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.
Pull Request Overview
This PR fixes HTML5 datetime-local input formatting by truncating milliseconds to 3 digits to ensure browser compatibility. The HTML5 datetime-local input type specification only supports up to 3 digits of milliseconds precision, but DRF was potentially outputting more digits which caused browser validation errors.
- Modifies the datetime-local field value formatting in HTMLFormRenderer to limit milliseconds to 3 digits
- Adds a test case to verify the correct datetime-local input formatting
Reviewed Changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
File | Description |
---|---|
rest_framework/renderers.py | Updates datetime-local field formatting to truncate milliseconds to 3 digits |
tests/test_renderers.py | Adds test case to verify datetime-local input formatting with milliseconds |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
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.
Thanks. I have two more remarks:
- Timezones currently get dropped, but I assume that's fine because this is about
datetime-local
which "represent[s] a local date and time, with no time-zone offset information". - The transformation assumes that the string format is iso-8601. It doesn't work if I specify, for example,
appointment = serializers.DateTimeField(format='%a %d %b %Y, %I:%M%p')
. Shouldn't the internal value be used as an input?
Thank you Peter! Not sure if I'm following: do you mean use the datetime value instead of the input.value (string)? So let me know if you want to fix this in this pull request |
Yes, that's what I meant. Sorry for being unclear! |
I tried to use this branch on a Django project with |
Correct! I'll go for that approach and add one more test for that case Bruno! Thanks! |
6d5cff3
to
0c2b20c
Compare
@browniebroke and @peterthomassen thank you so much for your quick reviews and guidance! 🙏
Sure, I'll add a new test with timezone!
Good question. I didn't fully understand what is parent so I'll read more code to be sure and add new cases if needed! |
617f876
to
34db0cb
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.
Pull Request Overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
bce2aa2
to
fee4af2
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.
Pull Request Overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
d894aab
to
a15dfb4
Compare
Hello team! I went for a new approach: get datetime string and transform to datetime object to better manipulation. I've added 7 tests in total! I think I covered all possible cases! |
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.
I like the new approach, but I don't understand the typing considerations. You probably have thought about that -- any insights on my comments?
Also, the tests have quite some code duplication (I'm not sure if that is a problem).
Yes!! Of course, I can improve that! |
Tests are prettier now! (I hope so) |
I've also renamed the |
a2938ce
to
5468bca
Compare
Co-authored-by: Peter Thomassen
5468bca
to
89efdab
Compare
@peterthomassen I would need your email to add you as |
What makes you think that? -- I believe it is not. There are also multiple functions in DRF that define variables with that name (you can find some via
Thanks, but that's not necessary :-) Anyway, by address is "my first name" at desec dot io. |
I meant this builtin function: https://docs.python.org/3/library/functions.html#format I realized when editor highlighted to me |
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.
Ah, I understand what you mean. (That's not reserved, but a built-in, which is shadowed when you redeclare it.)
Anyway, looks great to me now!
Ahhh correct! Thank you Peter!!! |
Description
Hi!
This PR delete everything after the first 3 digits of the miliseconds part of a
DateTimeField
input atHTMLFormRenderer
to avoid break in browsers:https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input/datetime-local#try_it
Please execute
./runtests.py TestDateTimeFieldHTMLFormRender
to run the new testsFix #5363