为什么django loaddata会为自定义用户模型静默失败?

时间:2016-12-11 23:37:44

标签: django

我们有一个通用的超级模型类:

class UUIDObject(models.Model):
    id = SimpleUUIDField(primary_key=True, default=uuid.uuid4)

    objects = InheritanceManager()

UUIDObject使用来自model_utils的InheritanceManager和SimpleUUIDField,它是Django的UUIDField的简单特化,对字符串值有更多的容忍度。

UUIDObject允许通过id检索模型实例,而不必担心模型类型。

应用程序的User模型继承自UUIDObject:

from django.contrib.auth.models import AbstractUser, UserManager as DjangoUserManager
from model_utils.managers import InheritanceManager

class UserManager(InheritanceManager, DjangoUserManager):
    pass


class User(AbstractUser, UUIDObject):
    objects = UserManager()

为了保护开发用户免受重新因素的影响,为方便起见,我们会保留开发人员的工具。这很容易使用例如django-admin.py dumpdata core.user --indent 2 > devs.json创建,结果文件看起来正确。当重新加载例如django-admin.py loaddata devs时,夹具的加载被报告为成功但对象不会被添加到表中。当我使用详细标志时,它表示夹具中的每个用户记录都被添加两次(这种排序是有意义的 - 一个用于根表,一个用于依赖表)但是没有实际条目出现在任何一个表中。

似乎loaddata只是默默地失败并报告成功。

1 个答案:

答案 0 :(得分:0)

我遇到了相同的问题,抽象类继承自InheritanceManage导致abstract = True声明在使用model_utils时已从模型中删除。

我尝试在post_save方法中执行save(),到目前为止工作:

from django.db.models.signals import post_save


class ProductA(AbstractProduct):
    pass


def instance_post_save(sender, instance, created, **kwargs):
    if kwargs.get('raw'):
        instance.save()
    return


post_save.connect(instance_post_save, sender=ProductA)