You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django后台创建Post对象时出现'int'无len()方法错误如何解决?

Django Admin创建Post对象时触发len()调用错误:对整数执行字符串操作

错误本质

对整数调用了仅适用于字符串/可迭代对象的len()函数,报错栈关键信息如下:

C:\Users\callu\PycharmProjects\DjangoTests\venv\Lib\site-packages\django\forms\boundfield.py, line 162, in _has_changed
            return field.has_changed(initial_value, self.data)
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     …
Local vars
C:\Users\callu\PycharmProjects\DjangoTests\venv\Lib\site-packages\django\forms\models.py, line 1650, in has_changed
            if len(initial) != len(data):
                     ^^^^^^^^^^^^  

触发场景

仅在Django Admin后台创建Post对象时抛出该错误,前端表单创建Post可正常执行。

Post模型代码

class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, default=None, null=True)
    title = models.CharField(max_length=100)
    slug = models.SlugField(blank=True)
    description = models.TextField(max_length=500)
    date = models.DateTimeField(auto_now_add=True)
    url_link = models.URLField(default=None, blank=True)
    likes = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name="post_support", default=0, blank=True)
    tags = models.ManyToManyField(Tag, blank=True)

    class Meta:
        ordering = ('-date',)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse("posts:post_detail", args=(str(self.id),))

问题定位与解决方案

问题出在likes字段的配置上:ManyToManyField不能设置default=0。

ManyToManyField的默认值应为可迭代对象(如空列表)或None,你设置的整数0不符合字段要求。当Django Admin的ModelForm处理该字段时,会将0作为初始值传入has_changed方法,该方法尝试调用len(initial)时,就会因0是整数而触发错误。前端表单未处理该字段的初始值逻辑,因此未触发报错。

修复步骤:

  • 移除likes字段的default=0参数,保留blank=True即可(ManyToManyField默认是空关联集合):
    likes = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name="post_support", blank=True)
    
  • 执行数据库迁移(移除无效参数无需修改表结构,但建议执行以同步配置):
    python manage.py makemigrations
    python manage.py migrate
    

内容的提问来源于stack exchange,提问作者Callum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 21:45:21