﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
36201	ModelChoiceField/ModelMultipleChoiceField.clean() should catch ValidationError raised by the queryset operations	Tim Graham	JaeHyuckSa	"As seen in cdc25ac4747bf5a6cdc2e70461c2d43c54529d35, `ValueError` and `TypeError` are caught by the queryset operations in `ModelChoiceField.clean()` and `ModelMultipleChoiceField.clean()`,  however, these exceptions are particular to [https://github.com/django/django/blob/65c46d6932c0956d2988d13ec3d9ab3ef9d96d61/django/db/models/fields/__init__.py#L2127-L2132 IntegerFielld.get_prep_value()]. A more common implementation of `get_prep_value()` delegates to `to_python()` which is supposed to raise `ValidationError` for invalid values ([https://github.com/django/django/blob/65c46d6932c0956d2988d13ec3d9ab3ef9d96d61/django/db/models/fields/__init__.py#L2748-L2773 as seen in UUIDField]). Thus, `ValidationError` should also be caught so that the [https://github.com/django/django/blob/65c46d6932c0956d2988d13ec3d9ab3ef9d96d61/django/forms/models.py#L1566-L1570 ""invalid choice""] error  is raised rather than the ""invalid"" error of the model field.

Aside: I discovered this while implementing `ObjectIdAutoField` in django-mongodb-backend. I had some difficulty figuring out what exception `get_prep_value()` should raise. I have to do some more digging to understand if `IntegerFielld.get_prep_value()` raising `ValueError` and `TypeError` is really appropriate, but this is the subject of another ticket."	Cleanup/optimization	closed	Forms	dev	Normal	fixed			Ready for checkin	1	0	0	0	0	0
