在django中定义自定义RelatedManager
我想重写类的相关管理器 我有一个在django中定义自定义RelatedManager,django,django-models,foreign-keys,django-1.7,django-managers,Django,Django Models,Foreign Keys,Django 1.7,Django Managers,我想重写类的相关管理器 我有一个公司型号。它有状态列,可以位于活动、非活动、暂停。我正在添加两个新的状态,称为销售,关闭 由于它的遗留模型,仅仅添加状态可能是毁灭性的(代码中有很多地方不按状态过滤) 因此,为了避免其他地方的无意更改,我决定为所有其他应用/其他地方隐藏我们的新状态,除非另有要求(我将仅为我们的应用/型号列出白名单) 我已经覆盖了公司中的对象管理器 class CompanyManager(models.Manager): def get_queryset(self):
公司
型号。它有状态
列,可以位于活动
、非活动
、暂停
。我正在添加两个新的状态,称为销售
,关闭
由于它的遗留模型,仅仅添加状态可能是毁灭性的(代码中有很多地方不按状态过滤)
因此,为了避免其他地方的无意更改,我决定为所有其他应用/其他地方隐藏我们的新状态,除非另有要求(我将仅为我们的应用/型号列出白名单)
我已经覆盖了公司中的对象管理器
class CompanyManager(models.Manager):
def get_queryset(self):
return super(CompanyRelatedManager, self).get_queryset().exclude(state__in=['SALES', 'CLOSED'])
class Company(models.Model):
_default_manager = models.Manager()
objects = CompanyManager()
allObjects = models.Manager()
name = models.TextField()
...
salesContact = models.ForeignKey(Contact)
问题是Company.objects.filter(blah=blah)
过滤掉了新的状态。但是像salesContact.companys.all()
这样的东西却没有
In [9]: salesContact.companies
Out[9]: <django.db.models.fields.related.RelatedManager at 0x12157a990>
[9]中的:salesContact.companys
出[9]:
我的问题是如何覆盖salesContact=models.ForeignKey(Contact)
等的相关管理器,以便修改默认查询集以排除我的新状态
而且,我不能覆盖默认管理器,因为覆盖默认管理器也意味着我覆盖了
db_管理器
,这导致了非预期的结果(db尝试插入而不是更新,整个其他故事).没有回答我的问题,因为那里的答案提出了解决该问题的另一种方法。我正在努力解决这个问题。不幸的是,我是@django 1.7,所以在虚拟环境中尝试您的解决方案。很抱歉,我错过了关于django 1.7的部分。但我认为您应该升级,因为1.7不再受支持。迁移功能本身就可以让升级完全值得。django的问题是,公司不断地在fork上添加,而实际上没有添加到django。是的,我们正在努力解开叉子并升级。是的,这有点问题。这就是为什么其他公司会构建可插拔的应用程序或现有django类的子类。