【问题标题】:Can't save and instantiate a child class in my django model无法在我的 django 模型中保存和实例化子类
【发布时间】:2017-02-01 00:52:50
【问题描述】:

好的,现在我将模型更改如下:

from django.contrib.auth.models import User

class Company(User):
    company_name = models.CharField(max_length = 20)


class Employee(User):
    pass

当我从 pytho manage.py shell 运行以下命令时:

u = Employee(first_name = 'john', last_name = 'smith', password = 'test', email = 'smith@gmail.com')
u.save()
e = Employee(user = u)
e.save()

我收到以下错误,但不明白为什么。 任何帮助表示赞赏,在此先感谢。

【问题讨论】:

  • 请不要尝试重新发明轮子,您应该按照 djangos 文档了解如何创建自己的用户模型
  • 找不到任何东西。有参考吗?
  • 比赛斯走得更远。您不得自行实施用户身份验证。
  • Nothing at all?....“django 自定义用户模型”的第一个结果
  • 能否请您提供创建员工对象的文件??

标签: python django database django-models


【解决方案1】:

写作时:

class x(y)

在 Python 中,这意味着 x 扩展(继承自)y。

同时

类员工(用户):
通过

有点道理(员工就是用户),这个

类公司(用户):

完全没有意义(公司不是用户)。

如果您希望用户有权以公司身份登录,我建议使用外键:

class Company(models.Model):
    user_with_permissions_fk = models.ManyToManyField((User)




至于这段代码:

u = 员工(名字 = 'john',姓氏 = 'smith',密码 = 'test',电子邮件 = 'smith@gmail.com')
u.save()
e = 员工(用户 = u)
e.save()

请提供您的语法错误 - 或 - 请考虑替换为以下代码:

new_records_to_insert = []
new_records_to_insert += Employee(first_name = 'john', last_name = 'smith', password = 'test', email = 'smith@gmail.com')
new_records_to_insert += Employee(first_name = 'john', last_name = 'smith', password = 'test', email = 'smith@gmail.com')
Employee.objects.bulk_create(new_records_to_insert)
# No need to .save()

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    相关资源
    最近更新 更多