我們有一個通用的超級模特類:爲什麼django loaddata默默爲自定義用戶模型失敗?
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只是默默地失敗並報告成功。
是不是更有可能的是,這是一件與你所使用 – e4c5
這可能涉及到第三方應用django fixture處理原始數據的方式(不使用對象管理器或常規保存方法保存模型),但我沒有使用任何特殊的保存方法,對象管理器都是關於查詢集而不是對象創建的任何事情。 –