1
0
mirror of https://github.com/django/django.git synced 2024-12-22 17:16:24 +00:00

Fixed #22935 -- Changed ForeignKey.default_error_messages['invalid'] to refer to correct field.

Thanks Tim Graham for suggestion and review.
This commit is contained in:
Anubhav Joshi 2014-07-02 10:13:07 +05:30 committed by Tim Graham
parent 27ee608b55
commit 10e83d48a3
4 changed files with 19 additions and 3 deletions

View File

@ -1600,7 +1600,7 @@ class ForeignObject(RelatedField):
class ForeignKey(ForeignObject): class ForeignKey(ForeignObject):
empty_strings_allowed = False empty_strings_allowed = False
default_error_messages = { default_error_messages = {
'invalid': _('%(model)s instance with pk %(pk)r does not exist.') 'invalid': _('%(model)s instance with %(field)s %(value)r does not exist.')
} }
description = _("Foreign Key (type determined by related field)") description = _("Foreign Key (type determined by related field)")
@ -1707,7 +1707,10 @@ class ForeignKey(ForeignObject):
raise exceptions.ValidationError( raise exceptions.ValidationError(
self.error_messages['invalid'], self.error_messages['invalid'],
code='invalid', code='invalid',
params={'model': self.rel.to._meta.verbose_name, 'pk': value}, params={
'model': self.rel.to._meta.verbose_name, 'pk': value,
'field': self.rel.field_name, 'value': value,
}, # 'pk' is included for backwards compatibilty
) )
def get_attname(self): def get_attname(self):

View File

@ -391,6 +391,13 @@ Miscellaneous
* Support for SpatiaLite < 2.4 has been dropped. * Support for SpatiaLite < 2.4 has been dropped.
* ``ForeignKey.default_error_message['invalid']`` has been changed from
``'%(model)s instance with pk %(pk)r does not exist.'`` to
``'%(model)s instance with %(field)s %(value)r does not exist.'`` If you are
using this message in your own code, please update the list of interpolated
parameters. Internally, Django will continue to provide the
``pk`` parameter in ``params`` for backwards compatibility.
.. _deprecated-features-1.8: .. _deprecated-features-1.8:
Features deprecated in 1.8 Features deprecated in 1.8

View File

@ -18,6 +18,7 @@ class ModelToValidate(models.Model):
number = models.IntegerField(db_column='number_val') number = models.IntegerField(db_column='number_val')
parent = models.ForeignKey('self', blank=True, null=True, limit_choices_to={'number': 10}) parent = models.ForeignKey('self', blank=True, null=True, limit_choices_to={'number': 10})
email = models.EmailField(blank=True) email = models.EmailField(blank=True)
ufm = models.ForeignKey('UniqueFieldsModel', to_field='unique_charfield', blank=True, null=True)
url = models.URLField(blank=True) url = models.URLField(blank=True)
f_with_custom_validator = models.IntegerField(blank=True, null=True, validators=[validate_answer_to_universe]) f_with_custom_validator = models.IntegerField(blank=True, null=True, validators=[validate_answer_to_universe])
slug = models.SlugField(blank=True) slug = models.SlugField(blank=True)

View File

@ -25,7 +25,12 @@ class BaseModelValidationTests(ValidationTestCase):
def test_wrong_FK_value_raises_error(self): def test_wrong_FK_value_raises_error(self):
mtv = ModelToValidate(number=10, name='Some Name', parent_id=3) mtv = ModelToValidate(number=10, name='Some Name', parent_id=3)
self.assertFailsValidation(mtv.full_clean, ['parent']) self.assertFieldFailsValidationWithMessage(mtv.full_clean, 'parent',
['model to validate instance with id %r does not exist.' % mtv.parent_id])
mtv = ModelToValidate(number=10, name='Some Name', ufm_id='Some Name')
self.assertFieldFailsValidationWithMessage(mtv.full_clean, 'ufm',
["unique fields model instance with unique_charfield %r does not exist." % mtv.name])
def test_correct_FK_value_validates(self): def test_correct_FK_value_validates(self):
parent = ModelToValidate.objects.create(number=10, name='Some Name') parent = ModelToValidate.objects.create(number=10, name='Some Name')