From e13cfc6dfd4212ef7a40db1a41d3ae6ac4b97de0 Mon Sep 17 00:00:00 2001 From: Jon Dufresne Date: Thu, 25 Jun 2020 10:28:52 +0200 Subject: Fixed #31596 -- Changed ForeignKey.validate() to use the base manager. --- tests/model_forms/tests.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'tests/model_forms/tests.py') diff --git a/tests/model_forms/tests.py b/tests/model_forms/tests.py index cb8d7c3f84..42ea63dd4d 100644 --- a/tests/model_forms/tests.py +++ b/tests/model_forms/tests.py @@ -1644,6 +1644,52 @@ class ModelFormBasicTests(TestCase): obj.name = 'Alice' obj.full_clean() + def test_validate_foreign_key_uses_default_manager(self): + class MyForm(forms.ModelForm): + class Meta: + model = Article + fields = '__all__' + + # Archived writers are filtered out by the default manager. + w = Writer.objects.create(name='Randy', archived=True) + data = { + 'headline': 'My Article', + 'slug': 'my-article', + 'pub_date': datetime.date.today(), + 'writer': w.pk, + 'article': 'lorem ipsum', + } + form = MyForm(data) + self.assertIs(form.is_valid(), False) + self.assertEqual( + form.errors, + {'writer': ['Select a valid choice. That choice is not one of the available choices.']}, + ) + + def test_validate_foreign_key_to_model_with_overridden_manager(self): + class MyForm(forms.ModelForm): + class Meta: + model = Article + fields = '__all__' + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + # Allow archived authors. + self.fields['writer'].queryset = Writer._base_manager.all() + + w = Writer.objects.create(name='Randy', archived=True) + data = { + 'headline': 'My Article', + 'slug': 'my-article', + 'pub_date': datetime.date.today(), + 'writer': w.pk, + 'article': 'lorem ipsum', + } + form = MyForm(data) + self.assertIs(form.is_valid(), True) + article = form.save() + self.assertEqual(article.writer, w) + class ModelMultipleChoiceFieldTests(TestCase): @classmethod -- cgit v1.3