Moh*_*han 5 django foreign-keys django-models django-managers django-1.7
我想覆盖一个类的相关管理器。
我有一个Company模型。它有state可以在ACTIVE, INACTIVE,中的列SUSPENDED。我添加了 2 个新状态,称为SALES, CLOSED。
由于其遗留模型,仅仅添加状态可能是毁灭性的(代码中有很多地方没有按状态过滤)。
因此,为了避免其他地方发生无意的更改,我决定隐藏所有其他应用程序/其他地方的新状态,除非另有要求(我将仅将我们的应用程序/模型列入白名单)
我已经覆盖了公司中的对象管理器。
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)
Run Code Online (Sandbox Code Playgroud)
问题在于Company.objects.filter(blah=blah)过滤掉了新的状态。但类似的事情salesContact.companies.all()却没有。
In [9]: salesContact.companies
Out[9]: <django.db.models.fields.related.RelatedManager at 0x12157a990>
Run Code Online (Sandbox Code Playgroud)
我的问题是如何覆盖相关管理器等,salesContact = models.ForeignKey(Contact)以便我可以修改默认查询集以排除我的新状态。
而且,我无法覆盖默认管理器,因为覆盖默认管理器也意味着我正在覆盖这会导致db_manager意外的后果(数据库尝试插入而不是更新,整个其他故事)。
| 归档时间: |
|
| 查看次数: |
1973 次 |
| 最近记录: |