Opened 6 years ago

Closed 6 years ago

#12223 closed (invalid)

Model field documentation needs clarification about validation

Reported by: JohnDoe Owned by: nobody
Component: Database layer (models, ORM) Version: 1.1
Severity: Keywords: validation
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: UI/UX:

Description

The modelfield EmailField does not actually validate the email, as stated in the documentation (see. http://docs.djangoproject.com/en/dev/ref/models/fields/#emailfield).

My test

class TestModel(models.Model):
    email = models.EmailField()
>>> t = TestModel(email='asd,,,')
>>> t.save()

No error is raised, even though that is not a valid email.

Change History (6)

comment:1 Changed 6 years ago by ubernostrum

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Resolution set to invalid
  • Status changed from new to closed

Models do not currently do any validation; that's what forms are for, and the default form field generated by EmailField does indeed implement a validation check.

comment:2 Changed 6 years ago by JohnDoe

That's not what the documentation states, it says:

A CharField that checks that the value is a valid e-mail address.

which does NOT happen.

So, either the documentation is wrong or the implementation of it must be.

comment:3 Changed 6 years ago by ubernostrum

The implementation is not wrong, and the documentation is not wrong. Model fields never perform any validation of this sort, and at the moment are quite incapable of doing so. Forms can and do perform such validation, and when a form is generated from a model which includes an EmailField, the appropriate validation will be performed. Whenever and wherever a model field has specialized constraints like this, the validation is always handled by forms, and every such model field generates an appropriate form field which performs that validation.

comment:4 follow-up: Changed 6 years ago by bitspace

  • Resolution invalid deleted
  • Status changed from closed to reopened
  • Summary changed from EmailField does not actually validate to Model field documentation needs clarification about validation

The documentation needs clarification as I also expected the model field to perform validation. Google revealed this ticket for me.

There really needs to be a "gotcha" prominently in the documentation that says what you said: "Whenever and wherever a model field has specialized constraints like this, the validation is always handled by forms, and every such model field generates an appropriate form field which performs that validation."

comment:5 Changed 6 years ago by rbanffy

  • Keywords validation added

Shoudn't EmailField have something like the "verify_exists" attribute of the URLField? At least a "verify_wellformedness" or "check_if_it_looks_like_an_email" that could employ the django.core.validators stuff.

comment:6 in reply to: ↑ 4 Changed 6 years ago by jkocherhans

  • Resolution set to invalid
  • Status changed from reopened to closed

Replying to bitspace:

The documentation needs clarification as I also expected the model field to perform validation. Google revealed this ticket for me.

There really needs to be a "gotcha" prominently in the documentation that says what you said: "Whenever and wherever a model field has specialized constraints like this, the validation is always handled by forms, and every such model field generates an appropriate form field which performs that validation."

There are already several such warnings (though they may not have been there at the time this ticket was opened.) Keeping in mind that we're not going to add a warning to every single field's documentation, if you can point out a specific place where you'd expect to see a warning, please feel free to reopen this ticket.

Note: See TracTickets for help on using tickets.
Back to Top