mirror of
https://github.com/django/django.git
synced 2025-10-31 09:41:08 +00:00
Fixed #27118 -- Made QuerySet.get_or_create()/update_or_create() error for a non-field in their arguments.
This commit is contained in:
committed by
Tim Graham
parent
b3330f52a8
commit
a5e13a0b92
@@ -5,9 +5,10 @@ import traceback
|
||||
from datetime import date, datetime, timedelta
|
||||
from threading import Thread
|
||||
|
||||
from django.core.exceptions import FieldError
|
||||
from django.db import DatabaseError, IntegrityError, connection
|
||||
from django.test import (
|
||||
TestCase, TransactionTestCase, ignore_warnings, skipUnlessDBFeature,
|
||||
SimpleTestCase, TestCase, TransactionTestCase, ignore_warnings, skipUnlessDBFeature,
|
||||
)
|
||||
from django.utils.encoding import DjangoUnicodeDecodeError
|
||||
|
||||
@@ -484,3 +485,27 @@ class UpdateOrCreateTransactionTests(TransactionTestCase):
|
||||
updated_person = Person.objects.get(first_name='John')
|
||||
self.assertGreater(after_update - before_start, timedelta(seconds=0.5))
|
||||
self.assertEqual(updated_person.last_name, 'NotLennon')
|
||||
|
||||
|
||||
class InvalidCreateArgumentsTests(SimpleTestCase):
|
||||
msg = "Invalid field name(s) for model Thing: 'nonexistent'."
|
||||
|
||||
def test_get_or_create_with_invalid_defaults(self):
|
||||
with self.assertRaisesMessage(FieldError, self.msg):
|
||||
Thing.objects.get_or_create(name='a', defaults={'nonexistent': 'b'})
|
||||
|
||||
def test_get_or_create_with_invalid_kwargs(self):
|
||||
with self.assertRaisesMessage(FieldError, self.msg):
|
||||
Thing.objects.get_or_create(name='a', nonexistent='b')
|
||||
|
||||
def test_update_or_create_with_invalid_defaults(self):
|
||||
with self.assertRaisesMessage(FieldError, self.msg):
|
||||
Thing.objects.update_or_create(name='a', defaults={'nonexistent': 'b'})
|
||||
|
||||
def test_update_or_create_with_invalid_kwargs(self):
|
||||
with self.assertRaisesMessage(FieldError, self.msg):
|
||||
Thing.objects.update_or_create(name='a', nonexistent='b')
|
||||
|
||||
def test_multiple_invalid_fields(self):
|
||||
with self.assertRaisesMessage(FieldError, "Invalid field name(s) for model Thing: 'invalid', 'nonexistent'"):
|
||||
Thing.objects.update_or_create(name='a', nonexistent='b', defaults={'invalid': 'c'})
|
||||
|
||||
Reference in New Issue
Block a user