@@ -81,6 +81,34 @@ class MyModel(models.Model):
81
81
instance = MyModel (field = value )
82
82
self .assertEqual (instance .get_field_display (), display )
83
83
84
+ def test_deconstruct (self ):
85
+ field = ArrayField (models .IntegerField ())
86
+ name , path , args , kwargs = field .deconstruct ()
87
+ new = ArrayField (* args , ** kwargs )
88
+ self .assertEqual (type (new .base_field ), type (field .base_field ))
89
+ self .assertIsNot (new .base_field , field .base_field )
90
+
91
+ def test_deconstruct_with_size (self ):
92
+ field = ArrayField (models .IntegerField (), size = 3 )
93
+ name , path , args , kwargs = field .deconstruct ()
94
+ new = ArrayField (* args , ** kwargs )
95
+ self .assertEqual (new .size , field .size )
96
+
97
+ def test_deconstruct_args (self ):
98
+ field = ArrayField (models .CharField (max_length = 20 ))
99
+ name , path , args , kwargs = field .deconstruct ()
100
+ new = ArrayField (* args , ** kwargs )
101
+ self .assertEqual (new .base_field .max_length , field .base_field .max_length )
102
+
103
+ def test_subclass_deconstruct (self ):
104
+ field = ArrayField (models .IntegerField ())
105
+ name , path , args , kwargs = field .deconstruct ()
106
+ self .assertEqual (path , "django_mongodb.fields.ArrayField" )
107
+
108
+ field = ArrayFieldSubclass ()
109
+ name , path , args , kwargs = field .deconstruct ()
110
+ self .assertEqual (path , "model_fields_.models.ArrayFieldSubclass" )
111
+
84
112
85
113
class SaveLoadTests (TestCase ):
86
114
def test_integer (self ):
@@ -613,53 +641,41 @@ class MyModel(models.Model):
613
641
self .assertEqual (MyModel ._meta .get_field ("field" ).check (), [])
614
642
615
643
644
+ @isolate_apps ("model_fields_" )
616
645
class MigrationsTests (TransactionTestCase ):
617
646
available_apps = ["model_fields_" ]
618
647
619
- def test_deconstruct (self ):
620
- field = ArrayField (models .IntegerField ())
621
- name , path , args , kwargs = field .deconstruct ()
622
- new = ArrayField (* args , ** kwargs )
623
- self .assertEqual (type (new .base_field ), type (field .base_field ))
624
- self .assertIsNot (new .base_field , field .base_field )
625
-
626
- def test_deconstruct_with_size (self ):
627
- field = ArrayField (models .IntegerField (), size = 3 )
628
- name , path , args , kwargs = field .deconstruct ()
629
- new = ArrayField (* args , ** kwargs )
630
- self .assertEqual (new .size , field .size )
631
-
632
- def test_deconstruct_args (self ):
633
- field = ArrayField (models .CharField (max_length = 20 ))
634
- name , path , args , kwargs = field .deconstruct ()
635
- new = ArrayField (* args , ** kwargs )
636
- self .assertEqual (new .base_field .max_length , field .base_field .max_length )
637
-
638
- def test_subclass_deconstruct (self ):
639
- field = ArrayField (models .IntegerField ())
640
- name , path , args , kwargs = field .deconstruct ()
641
- self .assertEqual (path , "django_mongodb.fields.ArrayField" )
642
-
643
- field = ArrayFieldSubclass ()
644
- name , path , args , kwargs = field .deconstruct ()
645
- self .assertEqual (path , "model_fields_.models.ArrayFieldSubclass" )
646
-
647
648
@override_settings (
648
649
MIGRATION_MODULES = {
649
650
"model_fields_" : "model_fields_.array_default_migrations" ,
650
651
}
651
652
)
652
653
def test_adding_field_with_default (self ):
653
- # See #22962
654
+ class IntegerArrayDefaultModel (models .Model ):
655
+ field = ArrayField (models .IntegerField (), size = None )
656
+
654
657
table_name = "model_fields__integerarraydefaultmodel"
655
- with connection .cursor () as cursor :
656
- self .assertNotIn (table_name , connection .introspection .table_names (cursor ))
657
- call_command ("migrate" , "model_fields_" , verbosity = 0 )
658
- with connection .cursor () as cursor :
659
- self .assertIn (table_name , connection .introspection .table_names (cursor ))
658
+ self .assertNotIn (table_name , connection .introspection .table_names (None ))
659
+ # Create collection
660
+ call_command ("migrate" , "model_fields_" , "0001" , verbosity = 0 )
661
+ self .assertIn (table_name , connection .introspection .table_names (None ))
662
+ obj = IntegerArrayDefaultModel .objects .create (field = [1 , 2 , 3 ])
663
+ # Add `field2 to IntegerArrayDefaultModel.
664
+ call_command ("migrate" , "model_fields_" , "0002" , verbosity = 0 )
665
+
666
+ class UpdatedIntegerArrayDefaultModel (models .Model ):
667
+ field = ArrayField (models .IntegerField (), size = None )
668
+ field_2 = ArrayField (models .IntegerField (), default = [], size = None )
669
+
670
+ class Meta :
671
+ db_table = "model_fields__integerarraydefaultmodel"
672
+
673
+ obj = UpdatedIntegerArrayDefaultModel .objects .get ()
674
+ # The default is populated on existing documents.
675
+ self .assertEqual (obj .field_2 , [])
676
+ # Cleanup.
660
677
call_command ("migrate" , "model_fields_" , "zero" , verbosity = 0 )
661
- with connection .cursor () as cursor :
662
- self .assertNotIn (table_name , connection .introspection .table_names (cursor ))
678
+ self .assertNotIn (table_name , connection .introspection .table_names (None ))
663
679
664
680
@override_settings (
665
681
MIGRATION_MODULES = {
@@ -669,7 +685,7 @@ def test_adding_field_with_default(self):
669
685
def test_adding_arrayfield_with_index (self ):
670
686
table_name = "model_fields__chartextarrayindexmodel"
671
687
call_command ("migrate" , "model_fields_" , verbosity = 0 )
672
- # All fields should have regular indexes.
688
+ # All fields should have indexes.
673
689
indexes = [
674
690
c ["columns" ][0 ]
675
691
for c in connection .introspection .get_constraints (None , table_name ).values ()
@@ -779,11 +795,7 @@ class AdminUtilsTests(SimpleTestCase):
779
795
780
796
def test_array_display_for_field (self ):
781
797
array_field = ArrayField (models .IntegerField ())
782
- display_value = display_for_field (
783
- [1 , 2 ],
784
- array_field ,
785
- self .empty_value ,
786
- )
798
+ display_value = display_for_field ([1 , 2 ], array_field , self .empty_value )
787
799
self .assertEqual (display_value , "1, 2" )
788
800
789
801
def test_array_with_choices_display_for_field (self ):
@@ -794,17 +806,7 @@ def test_array_with_choices_display_for_field(self):
794
806
([1 , 2 ], "2nd choice" ),
795
807
],
796
808
)
797
-
798
- display_value = display_for_field (
799
- [1 , 2 ],
800
- array_field ,
801
- self .empty_value ,
802
- )
809
+ display_value = display_for_field ([1 , 2 ], array_field , self .empty_value )
803
810
self .assertEqual (display_value , "2nd choice" )
804
-
805
- display_value = display_for_field (
806
- [99 , 99 ],
807
- array_field ,
808
- self .empty_value ,
809
- )
811
+ display_value = display_for_field ([99 , 99 ], array_field , self .empty_value )
810
812
self .assertEqual (display_value , self .empty_value )
0 commit comments