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

Django创建Site对象报value too long for type character varying(50)如何解决

报错原因:Django 内置 Site 模型的 domain 字段默认设置为 varchar(50),你使用的 Elastic Beanstalk 域名总长度超过50字符,触发字段长度校验报错。

可行解决思路

方案1:修改默认Site模型字段长度(最推荐,改动最小)

无需重写Site类,直接通过自定义迁移修改默认字段的长度限制即可:

  • 首先在已注册的任意业务app下生成空白迁移文件:
python manage.py makemigrations your_app_name --empty
  • 编辑生成的迁移文件,添加修改domain字段长度的操作:
from django.db import migrations, models

class Migration(migrations.Migration):
    dependencies = [
        ("your_app_name", "xxx_previous_migration"), # 替换为你的app上一个迁移的文件名
        ("sites", "0001_initial"),
    ]

    operations = [
        migrations.AlterField(
            model_name="site",
            name="domain",
            field=models.CharField(max_length=255, unique=True, verbose_name="domain name"),
        ),
    ]
  • 执行迁移使修改生效:
python manage.py migrate

方案2:自定义Site模型替换默认实现(仅需扩展Site功能时选用)

如果你需要同时给Site添加其他自定义字段,可以自定义替换默认模型:

  • 在你的业务app中定义继承自AbstractSite的自定义模型:
from django.contrib.sites.models import AbstractSite
from django.db import models

class CustomSite(AbstractSite):
    # 调整domain字段长度为255,可按需添加其他自定义字段
    domain = models.CharField(max_length=255, unique=True, verbose_name="domain name")
    
    class Meta:
        verbose_name = "site"
        verbose_name_plural = "sites"
  • 在settings.py中添加配置,指定使用自定义Site模型:
SITE_MODEL = "your_app_name.CustomSite"
# 禁用默认sites app的迁移
MIGRATION_MODULES = {
    "sites": "your_app_name.sites_migrations"
}
  • 生成并执行新的迁移即可。

临时应急方案

如果暂时不想修改数据库结构,可以先给你的 Elastic Beanstalk 域名绑定一个长度更短的CNAME别名,将短别名填写到Site的domain字段即可正常使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:48:02