我们有一个通用的超级模型类:
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只是默默地失败并报告成功。
答案 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)