【问题标题】:"TypeError: int() argument must be a string" when applying django migrations应用 django 迁移时“TypeError:int() 参数必须是字符串”
【发布时间】:2020-03-06 04:25:39
【问题描述】:

我收到以下错误:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'EventCategory'

在尝试应用 django 创建的迁移时。

由于迁移是自动生成的文件,因此我尝试过恢复迁移并再次运行 makemigrations,但这没有用。

更多上下文...

型号:

class Event(models.Model):
    name = models.CharField(max_length=100)
    longitue = models.DecimalField(max_digits=9, decimal_places=6)
    latitude = models.DecimalField(max_digits=9, decimal_places=6)
    from_datetime = models.DateTimeField()
    to_datetime = models.DateTimeField(blank=True, null=True)
    main_category = models.ForeignKey('even.EventCategory', 
                            default=EventCategory.get_default_category, 
                            on_delete=models.SET_DEFAULT)
    subcategories = models.ManyToManyField('even.EventCategory', related_name='subcategories')

迁移:

# Generated by Django 2.2.6 on 2019-11-10 01:44
class Migration(migrations.Migration):

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
        ('even', '0005_eventcategory_default'),
    ]

    operations = [
        migrations.AddField(
            model_name='event',
            name='subcategories',
            field=models.ManyToManyField(related_name='subcategories', to='even.EventCategory'),
        ),
        migrations.AlterField(
            model_name='event',
            name='main_category',
            field=models.ForeignKey(default=apps.even.models.eventCategory.EventCategory.get_default_category, on_delete=django.db.models.deletion.SET_DEFAULT, to='even.EventCategory'),
        ),
    ]

追溯:

Running migrations:
  Applying even.0006_auto_20191110_0144.../usr/local/lib/python3.7/site-packages/django/db/models/fields/__init__.py:1423:
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/django/db/models/fields/related.py", line 937, in get_db_prep_save
    return self.target_field.get_db_prep_save(value, connection=connection)
  File "/usr/local/lib/python3.7/site-packages/django/db/models/fields/__init__.py", line 789, in get_db_prep_save
    return self.get_db_prep_value(value, connection=connection, prepared=False)
  File "/usr/local/lib/python3.7/site-packages/django/db/models/fields/__init__.py", line 959, in get_db_prep_value
    value = self.get_prep_value(value)
  File "/usr/local/lib/python3.7/site-packages/django/db/models/fields/__init__.py", line 968, in get_prep_value
    return int(value)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'EventCategory'TypeError: int() argument must be a string, a bytes-like object or a number, not 'EventCategory'

【问题讨论】:

    标签: django django-models django-migrations


    【解决方案1】:

    我怀疑EventCategory.get_default_category 方法返回一个模型实例。 ForeignKey 字段的 default 必须作为字段而不是模型实例返回。

    因此,请确保您的 EventCategory.get_default_category 返回类别 pk。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-04
      • 1970-01-01
      • 2015-12-03
      • 2018-07-05
      • 1970-01-01
      • 2015-09-29
      • 2017-11-14
      相关资源
      最近更新 更多