数据迁移产生的ValueError必须是“用户”实例,但它是?

2024-10-01 07:33:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在数据库里添加一个职员。我是通过数据迁移来实现的。我可以通过迁移添加用户,但无法将其分配给我尝试创建的StaffPosition的User\ id。我得到的错误是一个ValueError,它说我需要使用一个“User”实例,但我以为我正在这样做。你知道吗

我使用ipdb对此进行了故障排除,并查看了一些属性的值。我也尝试过用不同的方式抓取用户,比如用用户实例的pk或id。我做的另一件事是注释掉create\u urechr\u user中的所有代码行,除了创建user对象的部分。这样,我就可以成功地将用户添加到数据库中。但我不能让我的员工身份证成为那个用户。你知道吗

# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2019-02-08 21:23
from __future__ import unicode_literals

from django.db import migrations
from django.contrib.auth.models import User

def create_urechr_user(apps, schema_editor):
    staffPosition = apps.get_model("hr", "staffPosition")
    User.objects.create_user(
         username = "myName",
         password = "test",
         is_active = True,
         email = "",
    )
    staff = staffPosition.objects.get(pk = 95)
    user = User.objects.get(username = "myName")


    staffPosition.objects.create(
        parent_staff_position = staff,
        user_id = user,
        title = "Testing Title",
    )

class Migration(migrations.Migration):

    dependencies = [
        ('hr', '0003_add_verbose_name_20190213_1519'),
    ]

   operations = [
        migrations.RunPython(create_urechr_user),
    ]

ValueError: Cannot assign "<User: urechr>": "StaffPosition.user_id" must be a "User" instance.


Tags: 用户fromimportid数据库getobjectsmigrations
1条回答
网友
1楼 · 发布于 2024-10-01 07:33:39

此错误的原因是您将迁移定义的模型与应用程序定义的模型混合使用。具体地说,从应用程序导入User模型,得到staffPosition作为apps.get_model。你知道吗

您必须使用apps.get_model而不是使用from django.contrib.auth.models import User来获取这两个模型:

from django.conf import settings

def create_urechr_user(apps, schema_editor):
    staffPosition = apps.get_model("hr", "staffPosition")

    # Here we get the user model the right way
    User = apps.get_model(settings.AUTH_USER_MODEL)
    User.objects.create_user(
         username = "myName",
         password = "test",
         is_active = True,
         email = "",
    )
    staff = staffPosition.objects.get(pk = 95)
    user = User.objects.get(username = "myName")


    staffPosition.objects.create(
        parent_staff_position = staff,
        user = user,
        title = "Testing Title",
    )

您可以在这里阅读AUTH\u USER\u MODEL:https://docs.djangoproject.com/en/2.2/ref/settings/#std:setting-AUTH_USER_MODEL

您也可以在django bugtracker中检查这个问题,问题与您的类似:https://code.djangoproject.com/ticket/29283

看起来有机会让Django错误报告更方便用户:)

相关问题 更多 >