Re: [Django] #34542: Required fields allowed to be blank are not accepted non-interactively using createsuperuser (was: Required fields not enforced when interactively using createsuperuser)

2 views
Skip to first unread message

Django

unread,
May 9, 2023, 1:38:08 AM5/9/23
to django-...@googlegroups.com
#34542: Required fields allowed to be blank are not accepted non-interactively
using createsuperuser
-------------------------------------+-------------------------------------
Reporter: Lantizia | Owner: nobody
Type: Bug | Status: new
Component: contrib.auth | Version: dev
Severity: Normal | Resolution:
Keywords: auth | Triage Stage:
createsuperuser superuser email | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Description changed by Lantizia:

Old description:

> Disclaimer: I really don't know much about Django... so I might be
> completely wrong on this.
>
> I've only encountered Django once before (installing mailman3), but this
> time I was trying to install NetBox and I noticed this sentence in their
> documentation...
>
> "Specifying an email address for the user is not required" (search for
> that line in the URL below for better context)
>
> [https://docs.netbox.dev/en/stable/installation/3-netbox/]
>
> According to this line...
> [https://github.com/django/django/blob/main/django/contrib/auth/models.py#L378]
>
> The 'email' field is marked required.
>
> However this section of the code (which is when createsuperuser is called
> **interactively**)...
> [https://github.com/django/django/blob/main/django/contrib/auth/management/commands/createsuperuser.py#L143]
>
> It doesn't look like it's written in a way which can enforce that, as a
> result when you run it this way... it lets you to enter nothing for the
> email field.
>
> However this section of the code (which is when createsuperuser is called
> **non-interactively**)...
> [https://github.com/django/django/blob/main/django/contrib/auth/management/commands/createsuperuser.py#L219]
>
> Seems to enforce required fields... and it definitely seems to be doing
> that as I've tried the following ways of **not** providing a value for
> the email field in the following ways...
>
> a) don't set the email field either through an argument or an environment
> variable... it'll still complain it is needed
> b) set the email field via a variable as just 'DJANGO_SUPERUSER_EMAIL='
> (i.e. setting the variable to null)... it still complains it is needed
> c) set the email field via an argument of --email '' (i.e. double quotes)
> or --email "" (i.e. double single quotes) or even --email \ (i.e.
> passing a single space)... it still complains it is needed
>
> So it seems to be that... as least **non-interactively** it is doing what
> it is supposed to... and making the 'required' field of 'email' non-
> optional. But **interactively** it is failing to do this.
>
> If that is right then the NetBox documentation is wrong (and I can let
> them know about that) as it would only be accidental that you're capable
> of not setting an email address for the superuser when using
> createsuperuser interactively.
>
> Hope this makes sense :)

New description:

I've only encountered Django once before (installing mailman3), but this
time I was trying to install NetBox and I noticed this sentence in their
documentation...

"Specifying an email address for the user is not required" (search for
that line in the URL below for better context)

[https://docs.netbox.dev/en/stable/installation/3-netbox/]

According to this line...
[https://github.com/django/django/blob/main/django/contrib/auth/models.py#L378]

The 'email' field is marked as required, but is also marked in a way to
allow it to be empty.

This is the section of the code that deals with validating required fields
when createsuperuser is called **interactively**...
[https://github.com/django/django/blob/main/django/contrib/auth/management/commands/createsuperuser.py#L143]

This is the section of the code that deals with validating required fields
when createsuperuser is called **non-interactively**...
[https://github.com/django/django/blob/main/django/contrib/auth/management/commands/createsuperuser.py#L219]

Although required fields are enforced, the **non-interactive** code
doesn't allow for those to be blank, where blank required fields are
permitted. I've tried to set a field like 'email' to blank **non-
interactively** but nothing works, for example...

a) just don't set the email field either through an argument or an
environment variable... it'll complain it is needed
b) set the email field via a variable as just 'DJANGO_SUPERUSER_EMAIL='
(i.e. setting the variable to null)... it still complains it is needed
c) set the email field via an argument of --email '' (i.e. double quotes)
or --email "" (i.e. double single quotes) or even --email \ (i.e. passing
a single space)... it still complains it is needed

Hope this makes sense :)

--

--
Ticket URL: <https://code.djangoproject.com/ticket/34542#comment:5>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

Reply all
Reply to author
Forward
0 new messages