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

Django扩展User模型报错:Registration()收到意外关键字参数'myuser'的解决方案

解决Django扩展User模型时的TypeError问题

嘿,这个问题其实很好排查——你在创建Registration实例的时候用错了字段名,导致Django识别不了这个参数。咱们来一步步拆解问题和修复方法:

问题根源

先看你的models.py,Registration模型和User关联的字段明明定义的是user:

user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)

但在views.py里,你创建Registration对象时却传了myuser=myuser这个参数——Django只认你在模型里定义的字段名user,自然会抛出unexpected keyword argument 'myuser'的错误。

直接修复方案

修改views.py中创建Registration实例的那一行代码:

原错误代码

reg = Registration(dob=dob,myuser=myuser)

修正后代码

reg = Registration(dob=dob, user=myuser)

改完之后再测试注册流程,这个错误应该就消失了。

额外的优化建议

为了避免以后再犯类似的字段名错误,或者简化代码,你可以试试这些方案:

  • 用Django信号自动关联创建:在models.py里添加信号处理,这样每次创建User对象时,会自动生成对应的Registration实例,不用手动写创建逻辑:
    from django.db.models.signals import post_save
    from django.dispatch import receiver
    
    @receiver(post_save, sender=User)
    def create_user_registration(sender, instance, created, **kwargs):
        if created:
            Registration.objects.create(user=instance)
    
    @receiver(post_save, sender=User)
    def save_user_registration(sender, instance, **kwargs):
        instance.registration.save()
    
    之后你只需要在注册时更新Registration的fname、lname、dob字段就行。
  • 改用官方推荐的扩展User方式:如果你的项目还在初期阶段,更推荐使用AbstractUser或者AbstractBaseUser来扩展用户模型,这是Django官方更推崇的方案,能避免后续很多关联模型的麻烦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 17:52:49