@@ -42,6 +42,49 @@ def test_on_conflict_nothing():
4242 assert obj2 .cookies == 'cheers'
4343
4444
45+ def test_on_conflict_nothing_foreign_primary_key ():
46+ """
47+ Tests whether simple insert NOTHING works correctly when the primary key of
48+ a field is a foreign key with a custom name.
49+ """
50+
51+ referenced_model = get_fake_model ({})
52+
53+ model = get_fake_model ({
54+ 'parent' : models .OneToOneField (
55+ referenced_model ,
56+ primary_key = True ,
57+ on_delete = models .CASCADE ,
58+ ),
59+ 'cookies' : models .CharField (max_length = 255 ),
60+ })
61+
62+ referenced_obj = referenced_model .objects .create ()
63+
64+ obj1 = (
65+ model .objects
66+ .on_conflict (['parent_id' ], ConflictAction .NOTHING )
67+ .insert_and_get (parent_id = referenced_obj .pk , cookies = 'cheers' )
68+ )
69+
70+ obj1 .refresh_from_db ()
71+ assert obj1 .parent == referenced_obj
72+ assert obj1 .cookies == 'cheers'
73+
74+ obj2 = (
75+ model .objects
76+ .on_conflict (['parent_id' ], ConflictAction .NOTHING )
77+ .insert_and_get (parent_id = referenced_obj .pk , cookies = 'choco' )
78+ )
79+
80+ obj1 .refresh_from_db ()
81+ obj2 .refresh_from_db ()
82+
83+ assert obj1 .pk == obj2 .pk
84+ assert obj1 .cookies == 'cheers'
85+ assert obj2 .cookies == 'cheers'
86+
87+
4588def test_on_conflict_nothing_foreign_key_by_object ():
4689 """
4790 Tests whether simple insert NOTHING works correctly when the potentially
@@ -148,4 +191,4 @@ def test_on_conflict_nothing_foreign_key_by_id():
148191 assert obj1 .other == other_obj
149192 assert obj2 .other == other_obj
150193 assert obj1 .data == "some data"
151- assert obj2 .data == "some data"
194+ assert obj2 .data == "some data"
0 commit comments