【问题标题】:Django: Trying to set user as a foreign key in migration raises a ValueErrorDjango:尝试在迁移中将用户设置为外键会引发 ValueError
【发布时间】:2020-11-24 06:07:32
【问题描述】:

我有一个扩展用户模型的成员类

  class Member(models.Model):
    user = models.OneToOneField(User, on_delete=models.PROTECT)
    # extra fields

当我尝试使用以下自定义迁移来使用文件中的初始数据集预填充数据库时

from django.db import migrations
from django.contrib.auth.models import User
import pandas as pd


def add_data_from_file(apps, schema_editor):
    Member = apps.get_model('persons', 'Member')
    df = pd.read_excel('path_to_file', sheet_name='sheet_name')

    for ind in df.index:
        user = User.objects.create_user(
            username=df.username[ind],
            first_name=df.first_name[ind],
            last_name=df.last_name[ind],
            email=df.email[ind],
            password=df.password[ind],
        )
        Member.objects.create(
            user=user,
            date_start=df.date_start[ind],
            date_stop=df.date_stop[ind]
        )


class Migration(migrations.Migration):

    dependencies = [
        ('persons', '0001_initial'),
    ]

    operations = [
        migrations.RunPython(add_data_from_file),
    ]

Django 提出:

ValueError:无法分配“”:“Member.user”必须是“User”实例。

知道为什么这不起作用吗?

【问题讨论】:

  • 恕我直言,这个实现应该通过管理命令甚至加载数据来完成。在迁移中执行此操作可能会使开发人员在稍后处理数据的加载方式上感到困惑。

标签: python django foreign-keys valueerror


【解决方案1】:

理想情况下代码应该可以工作,你能交叉检查models.py中的用户导入,它来自你定义的模型吗?

【讨论】:

  • 是的,迁移和models.py中的用户导入是一样的:from django.contrib.auth.models import User
【解决方案2】:

我仍然不知道为什么迁移本身不起作用,但是通过管理命令加载数据就可以了。

【讨论】:

    猜你喜欢
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多