重写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._db
和get_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()
。
上一篇: Overriding Django's RelatedManager methods
下一篇: javax.validation