簡體   English   中英

使用django-model-utils自動降級到子類

[英]Automatically downcast to subclass using django-model-utils

我有多個用戶模型..全部都通過自定義管理器繼承了基本模型

models.py

class BaseUser(models.Model):
    [...]

    objects = UserManager()


class StaffUser(BaseUser):
    [...]

class Customer(BaseUser):
    [...]

manager.py

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對繼承的模型進行自動向下轉換?

我想到了!

manager.py

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM