Okay, after much investigation, I found that the default value on this exact field was actually a callable that returned an instance of DisplayName rather than the pk. After changing that, the migrations ran successfully. I wonder if Django could provide a better hint of such issues. It’s strange because that default was on the previous migration file in the AddField command, but the migrate command never threw an error. It only threw it on AlterField, and the default didn’t even have to be specified in the AlterField version.
Thank you, Matthew From: django-users@googlegroups.com [mailto:django-users@googlegroups.com] On Behalf Of Matthew Pava Sent: Tuesday, September 12, 2017 4:09 PM To: django-users@googlegroups.com Subject: Migration Woes: TypeError: int() argument must be a string... on ForeignKeys I’m trying to alter my foreign keys on my audit log models to allow for null. Django creates a new migration file, with an operation something like below: migrations.AlterField( model_name='checklistauditlogentry', name='usage', field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='_auditlog_checklistusages', to='general.DisplayName'), ) Upon applying the migrations, I get this error (without full path shown): TypeError: int() argument must be a string, a bytes-like object or a number, not 'DisplayName' I just can’t seem to figure this one out. I can’t just delete the migrations and start over because I really need Django to modify the database to remove the requirement on those fields. Full trace: Running migrations: Applying documents.0002_auto_20170912_1445...Traceback (most recent call last): File "manage.py", line 10, in <module> execute_from_command_line(sys.argv) File "\lib\site-packages\django\core\management\__init__.py", line 364, in execute_from_command_line utility.execute() File "\lib\site-packages\django\core\management\__init__.py", line 356, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "\lib\site-packages\django\core\management\base.py", line 283, in run_from_argv self.execute(*args, **cmd_options) File "\lib\site-packages\django\core\management\base.py", line 330, in execute output = self.handle(*args, **options) File "\lib\site-packages\django\core\management\commands\migrate.py", line 204, in handle fake_initial=fake_initial, File "\lib\site-packages\django\db\migrations\executor.py", line 115, in migrate state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial) File "\lib\site-packages\django\db\migrations\executor.py", line 145, in _migrate_all_forwards state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial) File "\lib\site-packages\django\db\migrations\executor.py", line 244, in apply_migration state = migration.apply(state, schema_editor) File "\lib\site-packages\django\db\migrations\migration.py", line 129, in apply operation.database_forwards(self.app_label, schema_editor, old_state, project_state) File "\lib\site-packages\django\db\migrations\operations\fields.py", line 216, in database_forwards schema_editor.alter_field(from_model, from_field, to_field) File "\lib\site-packages\django\db\backends\base\schema.py", line 515, in alter_field old_db_params, new_db_params, strict) File "\lib\site-packages\django\db\backends\postgresql\schema.py", line 112, in _alter_field new_db_params, strict, File "\lib\site-packages\django\db\backends\base\schema.py", line 612, in _alter_field old_default = self.effective_default(old_field) File "\lib\site-packages\django\db\backends\base\schema.py", line 229, in effective_default default = field.get_db_prep_save(default, self.connection) File "\lib\site-packages\django\db\models\fields\related.py", line 963, in get_db_prep_save return self.target_field.get_db_prep_save(value, connection=connection) File "\lib\site-packages\django\db\models\fields\__init__.py", line 770, in get_db_prep_save prepared=False) File "\lib\site-packages\django\db\models\fields\__init__.py", line 958, in get_db_prep_value value = self.get_prep_value(value) File "\lib\site-packages\django\db\models\fields\__init__.py", line 966, in get_prep_value return int(value) TypeError: int() argument must be a string, a bytes-like object or a number, not 'DisplayName' -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscr...@googlegroups.com<mailto:django-users+unsubscr...@googlegroups.com>. To post to this group, send email to django-users@googlegroups.com<mailto:django-users@googlegroups.com>. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/ab2c2b14c7a04e82835dd53fc58eef30%40ISS1.ISS.LOCAL<https://groups.google.com/d/msgid/django-users/ab2c2b14c7a04e82835dd53fc58eef30%40ISS1.ISS.LOCAL?utm_medium=email&utm_source=footer>. For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscr...@googlegroups.com. To post to this group, send email to django-users@googlegroups.com. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/9cfb3dab4545461ea8e0964ea1be6ebc%40ISS1.ISS.LOCAL. For more options, visit https://groups.google.com/d/optout.