2
class SupercalifragilisticexpialidociousManager(models.Manager):
    # Sorry, I'm sick of Foo and Spam for now.
    def get_query_set(self, account=None):
        return super(SupercalifragilisticexpialidociousManager,
                     self).get_query_set().filter(uncle=model_thats_using_this_manager_instance.uncle)

私が探している魔法は「uncle=model_thats_using_this_manager_instance.uncle」です。どうにかしてこれができればいいような気がします。モデルを取得すると言うことはできますself.modelが、インスタンスを取得するにはどうすればよいでしょうか?

4

3 に答える 3

7

マネージャを使用しているときにインスタンスを要求することは意味がありません。マネージャーはクラスレベルの属性です。Supercalifragilisticexpialidociousのインスタンスがfoo.objects.all()どこにあるかを試してみると、明示的にエラーが発生します。foo

AttributeError: Manager isn't accessible via Supercalifragilisticexpialidocious instances
于 2010-01-25T22:39:27.653 に答える
4

私の知る限り、マネージャー内からモデルにアクセスすることはできません。マネージャーはテーブル全体を操作するので意味がありません。

モデルで次のようにする必要があります。

class Model(models.Model):
    # some attributes here
    def getAllRelativesWithSameUncle(self):
        return Model.objects.filter(uncle = self.uncle)

またはマネージャーで:

class SupercalifragilisticexpialidociousManager(models.Manager):
    def getSelfRelativesFor(self, model):
        return self.get_queryset().filter(uncle=model)
于 2010-01-25T22:43:26.420 に答える