带有自定义用户模型加载夹具错误的 Django 项目

Posted

技术标签:

【中文标题】带有自定义用户模型加载夹具错误的 Django 项目【英文标题】:Django project with custom user model load fixture error 【发布时间】:2019-10-30 07:23:06 【问题描述】:

我正在建立一个新的 django(2.2 版)项目并想使用自定义用户模型。当我加载夹具数据时,它失败并出现如下错误:

django.db.utils.IntegrityError:安装夹具时出现问题:在表“doctors_doctor”上插入或更新违反了外键约束“doctors_doctor_user_ptr_id_ba968804_fk_doctors_user_id” 详细信息:键 (user_ptr_id)=(1) 不存在于表“doctors_user”中。

来自 django 文档 - https://docs.djangoproject.com/en/2.1/topics/auth/customizing/#using-a-custom-user-model-when-starting-a-project 我意识到我在更改 settings.py 中的 AUTH_USER_MODEL 之前执行了“python manage.py migrate”。所以我尝试删除所有表并重做'python manage.py migrate',但它仍然遇到这个问题。

以下是我的代码

settings.py

AUTH_USER_MODEL='doctors.User'

models.py

class User(AbstractUser):
    mobile = models.CharField(max_length=30)

    fixtures_autodump = ['dev_users']

    class Meta:
        db_table = 'doctors_user'

    def __str__(self):
        return self.username


class Doctor(User):
    personal_id = models.CharField(max_length=255, blank=True)

    fixtures_autodump = ['dev_users']

    class Meta:
        db_table = 'doctors_doctor'

    def __str__(self):
        return self.username

dev_users.json

[
    
        "model": "doctors.doctor",
        "pk": 1,
        "fields": 
            "date_joined": "2019-06-16T09:09:56.127Z",
            "email": "user1@localhost.dev",
            "first_name": "user1",
            "groups": [],
            "is_active": true,
            "is_staff": true,
            "is_superuser": true,
            "last_login": null,
            "last_name": "test",
            "password": "pbkdf2_sha256$36000$nITgYnD9lKzm$cXGlthNYJDrrihQikgyh7HO5hm2fNvH71+fiCoMyIpY=",
            "user_permissions": []
        
    ,
    
        "model": "doctors.doctor",
        "pk": 2,
        "fields": 
            "date_joined": "2019-06-16T09:09:56.127Z",
            "email": "user2@localhost.dev",
            "first_name": "user2",
            "groups": [],
            "is_active": true,
            "is_staff": false,
            "is_superuser": false,
            "last_login": null,
            "last_name": "test",
            "password": "pbkdf2_sha256$36000$ohIbxnbyKjNm$smg+FvfhT1cF1kLt93EDz/n5KyfkDupIgkihsNIHQS8=",
            "user_permissions": []
        
    
]

我希望加载夹具数据可以成功,请帮助。

【问题讨论】:

【参考方案1】:

我的 JSON 文件中需要 2 条记录,一条是用户,另一条是我的自定义用户。这2个的pk值应该是一样的。这就是 Django loaddata 为自定义用户工作的方式。我做了这个改变,它工作。

【讨论】:

以上是关于带有自定义用户模型加载夹具错误的 Django 项目的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 中为 Selenium 测试加载夹具时出现完整性错误

django 在向后迁移/ loaddata 后从夹具加载数据使用的是模型模式而不是数据库模式

加载夹具时 django unittest 出错

Django - 夹具中的外键

带有加载夹具的 Django 单元测试,用于解决几个相关的应用程序问题

Django 不会为某些测试用例重新加载夹具