重写Django的RelatedManager方法

Django的ForeignRelatedObjectsDescriptor.create_manager(...)函数动态地创建RelatedManager类,并随后初始化动态创建的类的实例。

如果我想覆盖RelatedManager.add(...)方法,我该怎么做?

RelatedManager类在文件中创建: django/db/models/fields/related.py

我想如何使用自定义RelatedManager是......

class Record(Model):
    string = CharField()
class Managed(Model):
    record = ForeignKey('Record')
    boolean = BooleanField()
def view_function(...):
    record = Record(string='Example')
    record.save()
    record.managed_set.add(Managed(boolean=True)) # How to override add()?

任何建议,将不胜感激。


我不确定你需要覆盖什么 - 默认的查询集已经做到了你想要的。

但要回答这个问题,您可以在模型上定义一个自定义管理器,并将use_for_related_fields=True设置为确保它用作自动管理器。 请参阅有关控制自动管理器类型的文档。


我想我有同样的问题。

我有一个自定义管理器覆盖self._dbget_query_set()将其路由到不同的数据库。

我动态地创建了一个模型类,并使用我的自定义管理器设置了_default_manager

这适用于类本身,但不适用于相关字段(foreign或many2many),即使我设置了set use_for_related_fields = True

对于相关字段,追加db_manager(dbname) (例如, record.managed_set.db_manager(dbname) )可以修复all()方法,但不适用于add()方法。

要理解我的意思,请参阅此django票证:http://code.djangoproject.com/ticket/13358

我认为它适用于all() ,但不能add()

链接地址: http://www.djcxy.com/p/4325.html

上一篇: Overriding Django's RelatedManager methods

下一篇: javax.validation