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

Django中格式错误的十六进制UUID字符串问题:处理混合主键格式用户数据的方案咨询

解决Django后台因混合用户ID格式导致的UUID错误问题

别担心,这种混合ID格式引发的后台报错很常见,我给你几个可行的解决方案,按步骤来就能搞定:

方法一:通过Django Shell批量将数字ID更新为UUID

如果想保留原有用户数据,统一ID格式是最优选择:

  1. 打开终端进入Django项目根目录,启动Django Shell:
python manage.py shell
  1. 在Shell中导入所需模块和模型:
from user_app.models import CustomUser
import uuid
  1. 查询所有数字格式ID的用户(匹配纯数字的user_id):
old_users = CustomUser.objects.filter(user_id__regex=r'^\d+$')
  1. 循环遍历用户,为每个用户生成新UUID并更新:
for user in old_users:
    new_uuid = uuid.uuid4()
    user.user_id = new_uuid
    # 使用force_update确保主键字段能被修改
    user.save(force_update=True)

注意:如果用户模型关联了其他外键表,更新主键前要同步修改关联表的外键值,避免关联数据失效。无外键关联的话直接执行即可。

方法二:直接通过Django Shell删除数字ID的用户

如果这些旧用户数据不需要保留,直接删除更高效:

  1. 启动Django Shell并导入模型:
python manage.py shell
from user_app.models import CustomUser
  1. 一键删除所有数字ID的用户:
CustomUser.objects.filter(user_id__regex=r'^\d+$').delete()

临时修复:让管理面板先正常访问

如果想先打开后台管理面板再处理,可以临时过滤掉数字ID的用户:

  1. 打开user_app/admin.py,修改或自定义用户Admin类:
from django.contrib.auth.admin import UserAdmin
from .models import CustomUser

class CustomUserAdmin(UserAdmin):
    def get_queryset(self, request):
        qs = super().get_queryset(request)
        # 过滤纯数字ID的用户,让后台能正常加载
        return qs.exclude(user_id__regex=r'^\d+$')

admin.site.register(CustomUser, CustomUserAdmin)
  1. 重启Django服务,现在点击后台的用户选项就能正常访问了,之后再用上面的方法一或方法二处理旧数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 11:32:32