mirror of https://github.com/django/django.git
Fixed #32347 -- Made ModelChoiceField include the value in ValidationError for invalid_choice.
This commit is contained in:
parent
42e8cf47c7
commit
1adc09064f
1
AUTHORS
1
AUTHORS
|
@ -442,6 +442,7 @@ answer newbie questions, and generally made Django that much better:
|
|||
Jeremy Carbaugh <jcarbaugh@gmail.com>
|
||||
Jeremy Dunck <jdunck@gmail.com>
|
||||
Jeremy Lainé <jeremy.laine@m4x.org>
|
||||
Jerin Peter George <jerinpetergeorge@gmail.com>
|
||||
Jesse Young <adunar@gmail.com>
|
||||
Jezeniel Zapanta <jezeniel.zapanta@gmail.com>
|
||||
jhenry <jhenry@theonion.com>
|
||||
|
|
|
@ -1284,7 +1284,11 @@ class ModelChoiceField(ChoiceField):
|
|||
value = getattr(value, key)
|
||||
value = self.queryset.get(**{key: value})
|
||||
except (ValueError, TypeError, self.queryset.model.DoesNotExist):
|
||||
raise ValidationError(self.error_messages['invalid_choice'], code='invalid_choice')
|
||||
raise ValidationError(
|
||||
self.error_messages['invalid_choice'],
|
||||
code='invalid_choice',
|
||||
params={'value': value},
|
||||
)
|
||||
return value
|
||||
|
||||
def validate(self, value):
|
||||
|
|
|
@ -1219,6 +1219,9 @@ generating choices. See :ref:`iterating-relationship-choices` for details.
|
|||
* Validates that the given id exists in the queryset.
|
||||
* Error message keys: ``required``, ``invalid_choice``
|
||||
|
||||
The ``invalid_choice`` error message may contain ``%(value)s``, which will
|
||||
be replaced with the selected choice.
|
||||
|
||||
Allows the selection of a single model object, suitable for representing a
|
||||
foreign key. Note that the default widget for ``ModelChoiceField`` becomes
|
||||
impractical when the number of entries increases. You should avoid using it
|
||||
|
@ -1307,6 +1310,11 @@ generating choices. See :ref:`iterating-relationship-choices` for details.
|
|||
def label_from_instance(self, obj):
|
||||
return "My Object #%i" % obj.id
|
||||
|
||||
.. versionchanged:: 4.0
|
||||
|
||||
Support for containing ``%(value)s`` in the ``invalid_choice`` error
|
||||
message was added.
|
||||
|
||||
``ModelMultipleChoiceField``
|
||||
----------------------------
|
||||
|
||||
|
|
|
@ -135,7 +135,11 @@ File Uploads
|
|||
Forms
|
||||
~~~~~
|
||||
|
||||
* ...
|
||||
* :class:`~django.forms.ModelChoiceField` now includes the provided value in
|
||||
the ``params`` argument of a raised
|
||||
:exc:`~django.core.exceptions.ValidationError` for the ``invalid_choice``
|
||||
error message. This allows custom error messages to use the ``%(value)s``
|
||||
placeholder.
|
||||
|
||||
Generic Views
|
||||
~~~~~~~~~~~~~
|
||||
|
|
|
@ -308,3 +308,16 @@ class ModelChoiceFieldErrorMessagesTestCase(TestCase, AssertFormErrorsMixin):
|
|||
self.assertFormErrors(['REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors(['NOT A LIST OF VALUES'], f.clean, '3')
|
||||
self.assertFormErrors(['4 IS INVALID CHOICE'], f.clean, ['4'])
|
||||
|
||||
def test_modelchoicefield_value_placeholder(self):
|
||||
f = ModelChoiceField(
|
||||
queryset=ChoiceModel.objects.all(),
|
||||
error_messages={
|
||||
'invalid_choice': '"%(value)s" is not one of the available choices.',
|
||||
},
|
||||
)
|
||||
self.assertFormErrors(
|
||||
['"invalid" is not one of the available choices.'],
|
||||
f.clean,
|
||||
'invalid',
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue