@@ -81,6 +81,34 @@ class MyModel(models.Model):
8181 instance = MyModel (field = value )
8282 self .assertEqual (instance .get_field_display (), display )
8383
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+
84112
85113class SaveLoadTests (TestCase ):
86114 def test_integer (self ):
@@ -613,53 +641,41 @@ class MyModel(models.Model):
613641 self .assertEqual (MyModel ._meta .get_field ("field" ).check (), [])
614642
615643
644+ @isolate_apps ("model_fields_" )
616645class MigrationsTests (TransactionTestCase ):
617646 available_apps = ["model_fields_" ]
618647
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-
647648 @override_settings (
648649 MIGRATION_MODULES = {
649650 "model_fields_" : "model_fields_.array_default_migrations" ,
650651 }
651652 )
652653 def test_adding_field_with_default (self ):
653- # See #22962
654+ class IntegerArrayDefaultModel (models .Model ):
655+ field = ArrayField (models .IntegerField (), size = None )
656+
654657 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.
660677 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 ))
663679
664680 @override_settings (
665681 MIGRATION_MODULES = {
@@ -669,7 +685,7 @@ def test_adding_field_with_default(self):
669685 def test_adding_arrayfield_with_index (self ):
670686 table_name = "model_fields__chartextarrayindexmodel"
671687 call_command ("migrate" , "model_fields_" , verbosity = 0 )
672- # All fields should have regular indexes.
688+ # All fields should have indexes.
673689 indexes = [
674690 c ["columns" ][0 ]
675691 for c in connection .introspection .get_constraints (None , table_name ).values ()
@@ -779,11 +795,7 @@ class AdminUtilsTests(SimpleTestCase):
779795
780796 def test_array_display_for_field (self ):
781797 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 )
787799 self .assertEqual (display_value , "1, 2" )
788800
789801 def test_array_with_choices_display_for_field (self ):
@@ -794,17 +806,7 @@ def test_array_with_choices_display_for_field(self):
794806 ([1 , 2 ], "2nd choice" ),
795807 ],
796808 )
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 )
803810 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 )
810812 self .assertEqual (display_value , self .empty_value )
0 commit comments