@@ -395,7 +395,7 @@ class Meta:
395
395
# SchemaEditor.add_field() / remove_field() tests
396
396
@isolate_apps ("schema_" )
397
397
def test_add_remove_field_db_index_and_unique (self ):
398
- """AddField + EmbeddedModelField"""
398
+ """AddField/RemoveField + EmbeddedModelField + Field(db_index=True) & Field(unique=True). """
399
399
400
400
class Book (models .Model ):
401
401
name = models .CharField (max_length = 100 )
@@ -451,7 +451,7 @@ class Meta:
451
451
@ignore_warnings (category = RemovedInDjango51Warning )
452
452
@isolate_apps ("schema_" )
453
453
def test_add_remove_field_index_together (self ):
454
- """Meta.index_together on an embedded model ."""
454
+ """AddField/RemoveField + EmbeddedModelField + Meta.index_together ."""
455
455
456
456
class Address (models .Model ):
457
457
index_together_one = models .CharField (max_length = 10 )
@@ -512,6 +512,75 @@ class Meta:
512
512
editor .delete_model (Book )
513
513
self .assertTableNotExists (Book )
514
514
515
+ @isolate_apps ("schema_" )
516
+ def test_add_remove_field_unique_together (self ):
517
+ """AddField/RemoveField + EmbeddedModelField + Meta.unique_together."""
518
+
519
+ class Address (models .Model ):
520
+ unique_together_one = models .CharField (max_length = 10 )
521
+ unique_together_two = models .CharField (max_length = 10 )
522
+
523
+ class Meta :
524
+ app_label = "schema_"
525
+ unique_together = [("unique_together_one" , "unique_together_two" )]
526
+
527
+ class Author (models .Model ):
528
+ address = EmbeddedModelField (Address )
529
+ unique_together_three = models .CharField (max_length = 10 )
530
+ unique_together_four = models .CharField (max_length = 10 )
531
+
532
+ class Meta :
533
+ app_label = "schema_"
534
+ unique_together = [("unique_together_three" , "unique_together_four" )]
535
+
536
+ class Book (models .Model ):
537
+ author = EmbeddedModelField (Author )
538
+
539
+ class Meta :
540
+ app_label = "schema_"
541
+
542
+ new_field = EmbeddedModelField (Author )
543
+ new_field .set_attributes_from_name ("author" )
544
+ with connection .schema_editor () as editor :
545
+ # Create the table amd add the field.
546
+ editor .create_model (Book )
547
+ editor .add_field (Book , new_field )
548
+ # Embedded uniques are created.
549
+ self .assertEqual (
550
+ self .get_constraints_for_columns (
551
+ Book , ["author.unique_together_three" , "author.unique_together_four" ]
552
+ ),
553
+ [
554
+ "schema__author_author.unique_together_three_author.unique_together_four_39e1cb43_uniq"
555
+ ],
556
+ )
557
+ self .assertEqual (
558
+ self .get_constraints_for_columns (
559
+ Book ,
560
+ ["author.address.unique_together_one" , "author.address.unique_together_two" ],
561
+ ),
562
+ [
563
+ "schema__address_author.address.unique_together_one_author.address.unique_together_two_de682e30_uniq"
564
+ ],
565
+ )
566
+ editor .remove_field (Book , new_field )
567
+ # Embedded indexes are removed.
568
+ self .assertEqual (
569
+ self .get_constraints_for_columns (
570
+ Book , ["author.unique_together_three" , "author.unique_together_four" ]
571
+ ),
572
+ [],
573
+ )
574
+ self .assertEqual (
575
+ self .get_constraints_for_columns (
576
+ Book ,
577
+ ["author.address.unique_together_one" , "author.address.unique_together_two" ],
578
+ ),
579
+ [],
580
+ )
581
+ editor .delete_model (Book )
582
+ self .assertTableNotExists (Book )
583
+
515
584
@isolate_apps ("schema_" )
516
585
def _test_add_field_db_index (self ):
517
586
"""AddField + EmbeddedModelField"""
0 commit comments