假设我有一个带有Django Auth用户外键的模型:
class Something(models.Model):
user = models.ForeignKey(User, related_name='something')
然后我可以通过RelatedManager访问此模型:
u = User.objects.create_user('richardhenry', 'richard@example.com', 'password')
u.something.all()
我的问题是,如果我创建一个SomethingManager
并在其上定义一些方法:
class SomethingManager(models.Manager):
def do_something(self):
pass
是否可以在u
方法中获取原始User对象(如变量do_something()
)? (通过相关的经理;通过方法args传递它不是我想要的。)
答案 0 :(得分:2)
经理只与他们管理的模型直接相关。因此,在这种情况下,您的经理将连接到Something,但不会直接连接到User。
此外,管理员从查询集开始,而不是从对象开始,因此您必须从那里开始工作。
请注意,要将自定义方法与RelatedManager一起使用,您需要在管理中设置use_for_related_fields = True
。
所以要找到用户,你必须有点环形并获得对象,然后是用户:
def do_something(
ids = self.get_query_set().values_list('user__id', flat=True)
return User.objects.filter(id__in=ids).distinct()
上面应该只返回一个用户,你可以在末尾添加一个.get()来获取对象而不是查询集,但我喜欢返回查询集,因为你可以继续链接它们。