﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
34824	Migrations generates two records when ForeignObject.to_fields/from_fields is not a tuple.	puc_dong	puc_dong	"Our data platform involves many tables and uses a lot of ForeignObject fields. Many tables do not have foreign key associations. We found that if from_fields or to_fields is configured as an array type, without changing the table structure, if makemigrations is executed, a new migration record will be generated twice.

In the first generated migration file, from_fields and to_fields are both array types, and generate_altered_fields will type-convert the from_fields and to_fields values ​​under the current Model ForeignObject field into tuple types. Resulting in inconsistent comparisons and generating new migration file records

{{{
from_fields = getattr(new_field, ""from_fields"", None)
if from_fields:
    from_rename_key = (app_label, model_name)
    new_field.from_fields = tuple(
        [
            self.renamed_fields.get(
                from_rename_key + (from_field,), from_field
            )
            for from_field in from_fields
        ]
    )
    new_field.to_fields = tuple(
        [
            self.renamed_fields.get(rename_key + (to_field,), to_field)
            for to_field in new_field.to_fields
        ]
    )
...
if old_field_dec != new_field_dec and old_field_name == field_name:
    ...
    AlterField...
}}}



No error will be reported the third time, because the second makemigrations will be saved as tuple types into the migration file, which will be consistent with the next conversion.

operation record:

   [https://github.com/RelaxedDong/Images/assets/38744096/513e7021-bc2f-4f7e-aa51-188cdebceb00]
   [https://github.com/RelaxedDong/Images/assets/38744096/3be6e3b9-ec0c-4fa8-9fd9-bd04082747c9]
   [https://github.com/RelaxedDong/Images/assets/38744096/445fdd17-6c69-4e48-bb38-be9c11defe1b]

I try to solve this problem：https://github.com/django/django/pull/17238"	Cleanup/optimization	closed	Migrations	4.2	Normal	fixed			Ready for checkin	1	0	0	0	0	0
