mirror of
https://github.com/django/django.git
synced 2025-09-26 12:09:19 +00:00
Fixed #31596 -- Changed ForeignKey.validate() to use the base manager.
This commit is contained in:
parent
1e96de4f97
commit
e13cfc6dfd
6 changed files with 77 additions and 1 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue