mirror of https://github.com/django/django.git
Fixed #22640 -- Raised TypeError when instantiating model with keyword and positional args for the same field.
This commit is contained in:
parent
712fe12466
commit
73b1b225ce
|
@ -442,7 +442,11 @@ class Model(metaclass=ModelBase):
|
||||||
if val is _DEFERRED:
|
if val is _DEFERRED:
|
||||||
continue
|
continue
|
||||||
_setattr(self, field.attname, val)
|
_setattr(self, field.attname, val)
|
||||||
kwargs.pop(field.name, None)
|
if kwargs.pop(field.name, NOT_PROVIDED) is not NOT_PROVIDED:
|
||||||
|
raise TypeError(
|
||||||
|
f"{cls.__qualname__}() got both positional and "
|
||||||
|
f"keyword arguments for field '{field.name}'."
|
||||||
|
)
|
||||||
|
|
||||||
# Now we're left with the unprocessed fields that *must* come from
|
# Now we're left with the unprocessed fields that *must* come from
|
||||||
# keywords, or default.
|
# keywords, or default.
|
||||||
|
|
|
@ -68,6 +68,15 @@ class ModelInstanceCreationTests(TestCase):
|
||||||
a.save()
|
a.save()
|
||||||
self.assertEqual(a.headline, 'Fourth article')
|
self.assertEqual(a.headline, 'Fourth article')
|
||||||
|
|
||||||
|
def test_positional_and_keyword_args_for_the_same_field(self):
|
||||||
|
msg = "Article() got both positional and keyword arguments for field '%s'."
|
||||||
|
with self.assertRaisesMessage(TypeError, msg % 'headline'):
|
||||||
|
Article(None, 'Fifth article', headline='Other headline.')
|
||||||
|
with self.assertRaisesMessage(TypeError, msg % 'headline'):
|
||||||
|
Article(None, 'Sixth article', headline='')
|
||||||
|
with self.assertRaisesMessage(TypeError, msg % 'pub_date'):
|
||||||
|
Article(None, 'Seventh article', datetime(2021, 3, 1), pub_date=None)
|
||||||
|
|
||||||
def test_cannot_create_instance_with_invalid_kwargs(self):
|
def test_cannot_create_instance_with_invalid_kwargs(self):
|
||||||
with self.assertRaisesMessage(TypeError, "Article() got an unexpected keyword argument 'foo'"):
|
with self.assertRaisesMessage(TypeError, "Article() got an unexpected keyword argument 'foo'"):
|
||||||
Article(
|
Article(
|
||||||
|
|
Loading…
Reference in New Issue