Userena - 将 Profile 模型进一步扩展到两个不同的模型

2024-02-02

我想要实现的是,我想将个人资料模型进一步扩展到教师或学生。在注册表单中,我添加了一个选择字段,用户可以在其中选择他是老师还是学生。下面是我的模型结构。

class Profile(UserenaLanguageBaseProfile):        
     """ Default profile """
     GENDER_CHOICES = (
             (1, _('Male')),
             (2, _('Female')),
         )

     user = models.OneToOneField(User,
                                unique=True,
                                verbose_name=_('user'),
                                related_name='profile')

    gender = models.PositiveSmallIntegerField(_('gender'),
                                              choices=GENDER_CHOICES,
                                              blank=True,
                                              null=True)

class Teacher(Profile):
    profile = models.OneToOneField(Profile,
                                unique=True,
                                verbose_name=_('profile'),
                                related_name='teacher')

    home_address =  models.CharField(_('home_address'), max_length=255, blank=True)
    home_phone =  models.CharField(_('home_phone'), max_length=30, blank=True)
    cell_phone =  models.CharField(_('cell_phone'), max_length=30, blank=True)
    experience =  models.IntegerField(default = 0)
    summary =  models.TextField(_('summary'), max_length=500, blank=True)

class Student(Profile):
    profile = models.OneToOneField(Profile,
                                unique=True,
                                verbose_name=_('profile'),
                                related_name='student')

    grade = models.CharField(_('grade'), max_length=50, blank=True)

我将注册保存方法重写为:

def save(self):
        new_user = super(SignupFormExtra, self).save()
        new_user.first_name = self.cleaned_data['first_name']
        new_user.last_name = self.cleaned_data['last_name']
        new_user.save()

        if self.cleaned_data['teacher_or_student'] == 'teacher':
            teacher = Teacher(profile = new_user.get_profile())
            teacher.save()
        elif self.cleaned_data['teacher_or_student'] == 'student':
            student = Student(profile = new_user.get_profile())
            student.save()
        return new_user

当调用teacher.save()或student.save()方法时,它会引发一个完整性错误“(1048,“Column 'user_id'不能为空”)”,但我没有在这里创建一个新的用户实例,我试图将新创建的 profile_id 分配给教师或学生模型。我做错了方法??我应该怎么办?


正如错误所示,您无法创建Student or Teacher没有user因为您已将其定义为不可为空的字段。

确保您通过了课程new_user你已经定义了..

# ...
new_user.save()

if self.cleaned_data['teacher_or_student'] == 'teacher':
    teacher = Teacher(profile = new_user.get_profile(), user=new_user)
    teacher.save()
elif self.cleaned_data['teacher_or_student'] == 'student':
    student = Student(profile = new_user.get_profile(), user=new_user)
    student.save()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Userena - 将 Profile 模型进一步扩展到两个不同的模型 的相关文章

随机推荐

  • 将 facebook sdk 链接到 android 项目

    在 Eclipse 中创建 Android 项目并导入 facebook sdk 后 我转到 Android 应用程序的属性 选择 android 并添加 facebook sdk 然后单击 确定 然后 当我再次进入属性时 它会针对该 fa
  • 如何在Python中读取XML头

    如何在 Python 3 中读取 XML 文档的标头 理想情况下 我会使用 defusedxml 模块作为文件指出它更安全 https docs python org 3 library xml html 但在这一点上 经过几个小时的尝试弄
  • MongoDB:将数组添加到现有数组中

    我正在尝试将 Instructors 数组添加到现有的 Camps 数组中 层次结构看起来像这样 owner email email protected cdn cgi l email protection password mypassw
  • 适用于 Mac 的 Python Winsound 等效项

    我想知道是否有与在 Mac 上播放 wav 文件相当的 winsound 最好是本地进口 谢谢 正如其他模块所说的功能一样 本机导入会在这里造成麻烦 我假设您知道如何安装模块 所以我不会详细介绍 这是一个选项 Pygame sudo pip
  • Apollo GraphQL 突变(对象参数)

    所以 我正在尝试设计我的 Apollo 服务器 我想创建一个以对象作为参数的突变 这是我的架构的一个片段 它以某种方式导致了问题 我认为它在语法上是正确的 但我遇到了这个错误 errors message 预期的输入类型 您必须将 INPU
  • 小数点四舍五入到最接近的第 10 位

    需要将我的答案四舍五入到最接近的第十位 double finalPrice everyMile 2 8 DecimalFormat fmt new DecimalFormat 0 00 this answerField setText fm
  • 在 postgresql 中的列上设置“NOT NULL”是否会提高性能?

    我知道这在 MySQL 中是个好主意 如果我没记错的话 在 MySQL 中它允许索引更有效地工作 Setting NOT NULL本身对性能没有影响 检查几个周期 无关紧要 但是您可以通过实际使用 NULL 而不是虚拟值来提高性能 根据数据
  • C:从 stdin 读取,直到按 Enter 两次

    考虑一个简单的程序 它必须从 stdin 获取 5 个数字的序列并打印它们的和 没有说明将采用多少行输入 但如果换行符被采用两次 或按两次 Enter 键 则程序必须终止 例如 Input 1 1 1 1 1 2 2 2 2 2 3 3 3
  • 上传更新设置问题

    我有一个运行良好的上传表单 但我想以编程方式更改设置 但出现错误 Uploadify 在 document ready 上启动 我尝试将 updateSettings 绑定到按钮单击 也在 document ready 中完成 我还尝试在
  • MySQL:从一列中选择包含值的多行

    我想找到具有 FORD 和 SILVER 且用户在值列中输入值 200 的汽车的 car id table cars id car id name value 1 1 MAKE FORD 2 1 CARLINE FIESTA 3 1 COL
  • 如何将动态大小的纹理数组与 glTexImage2D 一起使用?

    目前 我可以加载我创建的静态大小的纹理 在本例中为 512 x 512 此代码来自标题 define TEXTURE WIDTH 512 define TEXTURE HEIGHT 512 GLubyte textureArray TEXT
  • 用于特定服务的CPU利用率%的Windows命令[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有没有办法从 Windows 上的脚本获取特定服务的 CPU 利用率 我知道wmic cpu get LoadPercentage将给出整个系统的 C
  • 如何在更新链末尾触发触发器?

    我有几个使用触发器相互交互的表 并且我当前处理触发器执行的方式使用pg trigger depth lt 2这很丑 我真的希望最终的触发器只运行一次 并且在所有每行的事情发生之后最后运行 很遗憾 CONSTRAINT TRIGGERs ar
  • 低功耗蓝牙:Android Gatt 客户端连接到 Linux Gatt 服务器

    我尝试通过蓝牙低功耗 GATT 模式将 android 连接到 linux Bluez中有一个示例代码 btgatt server c http code metager de source xref linux bluetooth blu
  • 将数组的至少“N”个元素与条件列表相匹配

    我有以下场景 我的 mongo 收藏之一包含以下格式的文档 user test tracks artist A artist B artist N 我想提取所有曲目 其艺术家在给定的数组中arr 为此 我使用以下查询 效果很好 collec
  • DataGridView ComboBox 列将接受任何文本

    我想要一个列DataGridView使用一个ComboBoxStyle DropDown样式组合框 用户可以在其中选择下拉列表中的条目之一 或键入任意文本 目前 我正在使用来自这个答案 https stackoverflow com a 3
  • 是否可以在标头中声明 constexpr 类并在单独的 .cpp 文件中定义它?

    我有课Dimension我在 Dimension h 文件中定义了它 就像我的所有类一样 class Dimension public constexpr Dimension noexcept constexpr Dimension int
  • 在python中部署azure函数不会安装requirements.txt中的依赖项

    我有一个简单的 python 脚本 可以按照说明部署为 azure 函数here https learn microsoft com en us azure azure functions functions reference pytho
  • 基于密钥大小的 RSA 性能

    一个不依赖于实现的理论问题 1024 位 RSA 与 4096 位 RSA 相比性能下降了多少 Thanks 根据RSA 密钥长度 http www javamex com tutorials cryptography rsa key le
  • Userena - 将 Profile 模型进一步扩展到两个不同的模型

    我想要实现的是 我想将个人资料模型进一步扩展到教师或学生 在注册表单中 我添加了一个选择字段 用户可以在其中选择他是老师还是学生 下面是我的模型结构 class Profile UserenaLanguageBaseProfile Defa