Python 您如何访问;呼唤;通过Django中的RelatedManager创建对象?

Python 您如何访问;呼唤;通过Django中的RelatedManager创建对象?,python,django,Python,Django,假设我有一个带有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()

假设我有一个带有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

是否可以在
do\u something()
方法中获取原始用户对象(如变量
u
)?(通过相关的管理器;通过args方法传递它不是我想要的。)

管理器只直接连接到他们管理的模型。因此,在这种情况下,您的经理将连接到某个对象,而不是直接连接到用户

此外,管理器从查询集开始,而不是从对象开始,因此您必须从那里开始工作

请记住,要在RelatedManager中使用自定义方法,您需要在Manager中设置
use\u for_related\u 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()来获取对象,而不是queryset,但是我喜欢返回queryset,因为您可以继续链接它们