Django 1.2.5:我有一个带有自定义管理器的模型。数据保存正确,但对相关对象没有正确检索。
我的模特是:
以下是一个问题:
class Question(models.Model):
    subjective_statistic = models.ManyToManyField(SubjectiveStatistic, null=True, blank=True)下面是SubjectiveStatistic:
class SubjectiveStatistic(Statistic):
    ## Use a custom model manager so that the default object collection is
    # filtered by the object class name.
    objects = RestrictByTypeManager('SubjectiveStatistic')
    ## Override the __init__ method to set the type field
    def __init__(self, *args, **kwargs):
        self.type = self.__class__.__name__
        return super(SubjectiveStatistic, self).__init__(*args, **kwargs)
    class Meta:
        proxy = True下面是经理:
from django.db import models
## Custom model manager that returns objects filtered so that 'type' == a
# given string.
class RestrictByTypeManager(models.Manager):
    def __init__(self, type='', *args, **kwargs):
        self.type = type
        return super(RestrictByTypeManager, self).__init__(*args, **kwargs)
    def get_query_set(self):
        return super(RestrictByTypeManager, self).get_query_set().filter(type=self.type)为了正确返回相关对象,我需要做什么?question.subjective_statistic.exists()不返回任何内容,尽管数据库中存在关系。
也许是因为RestrictByTypeManager扩展了Manager而不是ManyRelatedManager (但我做不到,因为这是一个内部类)或者类似的东西?
发布于 2011-06-23 22:49:02
要使用Question模型中的自定义管理器,请在自定义管理器的定义中添加use_for_related_fields = True:
from django.db import models
## Custom model manager that returns objects filtered so that 'type' == a
# given string.
class RestrictByTypeManager(models.Manager):
    use_for_related_fields = True
    def __init__(self, type='', *args, **kwargs):
        self.type = type
        return super(RestrictByTypeManager, self).__init__(*args, **kwargs)
    def get_query_set(self):
        return super(RestrictByTypeManager, self).get_query_set().filter(type=self.type)这样,RestrictByTypeManager将被用作SubjectiveStatistic模型的管理器,无论是直接访问还是反向访问,就像许多关系一样。
这里有更多的信息:控制自动管理器类型
https://stackoverflow.com/questions/6461180
复制相似问题