[英]Automatically downcast to subclass using django-model-utils
我有多個用戶模型..全部都通過自定義管理器繼承了基本模型
class BaseUser(models.Model):
[...]
objects = UserManager()
class StaffUser(BaseUser):
[...]
class Customer(BaseUser):
[...]
from model_utils.managers import InheritanceManager
class UserManager(..., InheritanceManager):
[...]
通過從django-model-utils繼承InheritanceManager,我可以對繼承的模型進行自動向下轉換。 因此,例如,如果我有3個對象,則每個用戶類型之一:
user = BaseUser.objects.select_subclasses()
[Customer: customer@example.com, BaseUser: studio@example.com, StaffUser: staff@example.com]
為此,我必須顯式調用.select_subclasses()
,
但是我想自動進行向下轉換而不必調用.select_subclasses()
所以我嘗試了:
類UserManager(...,InheritanceManager):
def get_queryset(self, *args, **kwargs):
queryset = super(UserManager, self).get_queryset()
return queryset.get_subclass(*args, **kwargs)
但是現在當我嘗試使用時:
user = EmailUser.objects.all()
我得到這個:
MultipleObjectsReturned: get() returned more than one BaseUser -- it returned 3!
是否可以使用django-model-utils對繼承的模型進行自動向下轉換?
我想到了!
from model_utils.managers import InheritanceQuerySet
class UserManager([...]):
def get_queryset(self):
return InheritanceQuerySet(self.model).select_subclasses()
我不必繼承InheritanceManager
,而使用InheritanceQuerySet
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.