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)
我正在寻找的魔法是“叔叔= model_thats_using_this_manager_instance.uncle”。看起来我应该能够以某种方式做到这一点。我知道我可以说self.model
来获取模型,但是如何获取实例?
答案 0 :(得分:6)
当您使用经理时要求实例是没有意义的。管理员是类级属性 - 如果你尝试foo.objects.all()
foo
是Supercalifragilisticexpialidocious的一个实例,你将明确地得到一个错误:
AttributeError: Manager isn't accessible via Supercalifragilisticexpialidocious instances
答案 1 :(得分:3)
据我所知,您无法从经理内部访问该模型。当管理者在整个桌面上运作时,它没有意义。
你应该在模型中做这样的事情:
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)
答案 2 :(得分:1)
在类似object.related_name.create()
的方法中,Django会发送一个hint
参数:
class UserQuerySet(QuerySet):
def create(self, *args, **kwargs):
print(self._hints)
# >>> {'instance': <User: random-user>}
print(self._hints.get('instance'))
# >>> <User: random-user>
我现在正在使用Django 1.11。