@@ -527,3 +527,40 @@ def test_queries_on_parent_access(self):
527
527
restaurant = italian_restaurant .restaurant_ptr
528
528
self .assertEqual (restaurant .place_ptr .restaurant , restaurant )
529
529
self .assertEqual (restaurant .italianrestaurant , italian_restaurant )
530
+
531
+ def test_id_field_update_on_ancestor_change (self ):
532
+ place1 = Place .objects .create (name = 'House of Pasta' , address = '944 Fullerton' )
533
+ place2 = Place .objects .create (name = 'House of Pizza' , address = '954 Fullerton' )
534
+ place3 = Place .objects .create (name = 'Burger house' , address = '964 Fullerton' )
535
+ restaurant1 = Restaurant .objects .create (
536
+ place_ptr = place1 ,
537
+ serves_hot_dogs = True ,
538
+ serves_pizza = False ,
539
+ )
540
+ restaurant2 = Restaurant .objects .create (
541
+ place_ptr = place2 ,
542
+ serves_hot_dogs = True ,
543
+ serves_pizza = False ,
544
+ )
545
+
546
+ italian_restaurant = ItalianRestaurant .objects .create (
547
+ restaurant_ptr = restaurant1 ,
548
+ serves_gnocchi = True ,
549
+ )
550
+ # Changing the parent of a restaurant changes the restaurant's ID & PK.
551
+ restaurant1 .place_ptr = place3
552
+ self .assertEqual (restaurant1 .pk , place3 .pk )
553
+ self .assertEqual (restaurant1 .id , place3 .id )
554
+ self .assertEqual (restaurant1 .pk , restaurant1 .id )
555
+ restaurant1 .place_ptr = None
556
+ self .assertIsNone (restaurant1 .pk )
557
+ self .assertIsNone (restaurant1 .id )
558
+ # Changing the parent of an italian restaurant changes the restaurant's
559
+ # ID & PK.
560
+ italian_restaurant .restaurant_ptr = restaurant2
561
+ self .assertEqual (italian_restaurant .pk , restaurant2 .pk )
562
+ self .assertEqual (italian_restaurant .id , restaurant2 .id )
563
+ self .assertEqual (italian_restaurant .pk , italian_restaurant .id )
564
+ italian_restaurant .restaurant_ptr = None
565
+ self .assertIsNone (italian_restaurant .pk )
566
+ self .assertIsNone (italian_restaurant .id )
0 commit comments