allauth sets placeholder="Code" on the field. Grey text sitting inside the otp boxes reads as an already-typed code, so it goes -- the sr-only label outside the box still names the field. Suppressed with placeholder=False rather than by deleting the key: as_widget() merges the widget's own attrs back in at render time, so popping it from a copy does nothing. Django's attribute template omits attrs whose value is False. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
14 KiB
14 KiB