Django:没有这样的桌子'使用OneToOneField扩展用户模型后

时间:2016-11-09 18:52:13

标签: django

(Django 1.10。)我试图遵循this关于使用OneToOneField扩展用户模型的建议。在我的应用程序投票中#39; (是的,我正在扩展在官方教程中制作的应用程序)我想存储关于每个用户的另外两条信息,即一串字符和一个数字。

在我的models.py中,我现在有以下内容:

from django.contrib.auth.models import User

class Employee(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    stopien = models.CharField(max_length=100)
    pensum = models.IntegerField()

以及admin.py中的以下内容:

from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User

from polls.models import Employee

class EmployeeInline(admin.StackedInline):
    model = Employee
    can_delete = False
    verbose_name_plural = 'employee'

class UserAdmin(BaseUserAdmin):
    inlines = (EmployeeInline, )

admin.site.unregister(User)
admin.site.register(User, UserAdmin)

使用管理面板添加用户时,我的两个新字段正确显示。但是,当我点击“保存”时,或者如果我没有添加任何用户,只需在管理面板中点击我唯一管理员用户的名称,我就会收到以下错误:

OperationalError at /admin/auth/user/1/change/
no such table: polls_employee

我看到一些与类似问题相关的问题和答案,但它们似乎与旧版本的Django相关。任何人都可以给我一个关于我应该做什么的提示吗?理想情况下,我希望在管理面板中显示我的两个附加字段,但我怀疑这可能是未来的任务。

我必须承认我不理解我在使用的建议后的文档中的这一段:

这些配置文件模型在任何方面都不是特别的 - 它们只是恰好与User模型具有一对一链接的Django模型。因此,在创建用户时不会自动创建它们,但可以使用 django.db.models.signals.post_save 来创建或更新相关模型。 < / p>

我是否需要将这个&#39; post-save&#39;管理面板的某些元素?

我非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

您需要运行makemigrations为新模型创建迁移,然后migrate运行迁移并创建数据库表。

./manage.py makemigrations
./manage.py migrate