【发布时间】:2016-12-11 23:37:43
【问题描述】:
我们有一个通用的超级模型类:
class UUIDObject(models.Model):
id = SimpleUUIDField(primary_key=True, default=uuid.uuid4)
objects = InheritanceManager()
UUIDObject 使用来自model_utils 的 InheritanceManager 和 SimpleUUIDField,后者是 Django 的 UUIDField 的一个简单特化,对字符串值具有更大的容忍度。
UUIDObject 允许通过 id 检索模型实例,而不必担心模型类型。
应用程序的用户模型继承自 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 只是默默地失败并报告成功。
【问题讨论】:
-
这不是更有可能与您正在使用的第三方应用程序有关
-
这可能与 django 夹具处理原始数据的方式有关(在不使用对象管理器或普通保存方法的情况下保存模型)但我没有使用任何特殊的保存方法和对象管理器都是关于查询集,而不是与对象创建有关。
标签: django