Django报错:Profile()收到意外关键字参数'id_user'求助
Django报错:Profile() got unexpected keyword arguments: 'id_user' 解决方法及Admin配置
问题原因
你的Profile模型中,id_user = models.IntegerField这一行缺少括号,导致Django无法将其识别为有效数据库字段——你现在是把字段类本身赋值给了id_user,而非创建字段实例。因此在视图中创建Profile时传入id_user=user_model.id,Django会判定这个参数未定义,抛出报错。
另外,这个id_user字段完全冗余:你已经通过user = models.ForeignKey(User, on_delete=models.CASCADE)建立了与User的关联,直接通过profile.user.id即可获取用户ID,没必要单独存储。
修复步骤
1. 修正Profile模型
修改models.py,建议直接删除冗余的id_user字段:
from django.db import models from django.contrib.auth import get_user_model User = get_user_model() class Profile(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) bio = models.TextField(blank=True) profileimg = models.ImageField(upload_to='profile_images', default='book-icon.png') location = models.CharField(max_length=100, blank=True) def __str__(self): return self.user.username
如果执意保留该字段,需补全括号:id_user = models.IntegerField(),但不推荐这种做法。
2. 调整视图代码
删除id_user参数,修改视图中创建Profile的代码:
# 原代码 new_profile = Profile.objects.create(user=user_model, id_user=user_model.id) # 修改后 new_profile = Profile.objects.create(user=user_model)
3. 执行数据库迁移
修改模型后必须执行迁移命令,更新数据库结构:
python manage.py makemigrations python manage.py migrate
在Admin门户查看Profile
在app目录下的admin.py中注册Profile模型:
from django.contrib import admin from .models import Profile admin.site.register(Profile)
重启服务器后,登录Admin后台就能看到Profile的管理入口。
内容的提问来源于stack exchange,提问作者Jacqueline Pineda
相关产品推荐
相关产品推荐

