【发布时间】:2014-02-07 19:35:52
【问题描述】:
我在这里缺乏 Python 元编程知识。假设我有以下内容:
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)。如您所见,唯一的变化是在过滤器中。
如何从Company、Publisher等模型中抽象出Own(InsertModelNameHere)Manager并使用它?我想在管理器定义中指定过滤器 kwargs。
【问题讨论】:
标签: python django django-models metaprogramming