Commit 10e83d48 authored by Anubhav Joshi's avatar Anubhav Joshi Committed by Tim Graham
Browse files

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

Thanks Tim Graham for suggestion and review.
parent 27ee608b
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -1600,7 +1600,7 @@ class ForeignObject(RelatedField):
class ForeignKey(ForeignObject):
    empty_strings_allowed = False
    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)")

@@ -1707,7 +1707,10 @@ class ForeignKey(ForeignObject):
            raise exceptions.ValidationError(
                self.error_messages['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):
+7 −0
Original line number Diff line number Diff line
@@ -391,6 +391,13 @@ Miscellaneous

* 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:

Features deprecated in 1.8
+1 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ class ModelToValidate(models.Model):
    number = models.IntegerField(db_column='number_val')
    parent = models.ForeignKey('self', blank=True, null=True, limit_choices_to={'number': 10})
    email = models.EmailField(blank=True)
    ufm = models.ForeignKey('UniqueFieldsModel', to_field='unique_charfield', blank=True, null=True)
    url = models.URLField(blank=True)
    f_with_custom_validator = models.IntegerField(blank=True, null=True, validators=[validate_answer_to_universe])
    slug = models.SlugField(blank=True)
+6 −1
Original line number Diff line number Diff line
@@ -25,7 +25,12 @@ class BaseModelValidationTests(ValidationTestCase):

    def test_wrong_FK_value_raises_error(self):
        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):
        parent = ModelToValidate.objects.create(number=10, name='Some Name')