我在這裏缺乏Python元編程知識。比方說,我有以下幾種:摘要Django模型管理器
class OwnCompanyManager(models.Manager):
"""Only companies of this user"""
def get_queryset(self, user):
if user.is_superuser:
return super(OwnCompanyManager, self).get_queryset()
return super(OwnCompanyManager, self).get_queryset().filter(
companyuser__user=user)
class OwnPublisherManager(models.Manager):
"""Only publishers of this user's company"""
def get_queryset(self, user):
if user.is_superuser:
return super(OwnPublisherManager, self).get_queryset()
return super(OwnPublisherManager, self).get_queryset().filter(
company__companyuser__user=user)
class Company(models.Model):
name = models.CharField(max_length=45)
objects = models.Manager()
own = OwnCompanyManager()
class Publisher(models.Model):
company = models.ForeignKey(Company)
allow_latest_dev = models.BooleanField(default=False)
domains_blocked = models.BooleanField(default=False)
objects = models.Manager()
own = OwnPublisherManager()
我還有很多。我不喜歡複製粘貼樣板Own(Publisher|Company|Etcetra)Manager)
。正如你所看到的,唯一的變化就是過濾器。
如何抽象Own(InsertModelNameHere)Manager
並從Company
,Publisher
和其他模型中使用它?我想在管理器定義中指定過濾器kwargs。
這看起來更好。但是,是否有可能擁有AbstractManager並且沒有其他類?即在模型定義中構建Manager類? –