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()?
如有任何建议,我们将不胜感激。在
我想我也有同样的问题。在
我有一个自定义管理器,它重写
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()
,但不适用于{我不确定您需要重写的原因-默认的queryset已经完成了您想要的。在
但是要回答这个问题,您可以在模型上定义一个自定义管理器并设置
use_for_related_fields=True
以确保它被用作自动管理器。请参阅controlling automatic Manager types上的文档。在相关问题 更多 >
编程相关推荐