2010-02-11 38 views
2

說我有一個外鍵一個Django驗證用戶的模型:如何通過Django中的RelatedManager訪問「調用」對象?

u = User.objects.create_user('richardhenry', '[email protected]', 'password') 
u.something.all() 

我的問題是,如果我創建一個SomethingManager

class Something(models.Model): 

    user = models.ForeignKey(User, related_name='something') 

然後我就可以通過RelatedManager訪問該模型並定義它的一些方法:

class SomethingManager(models.Manager): 

    def do_something(self): 
     pass 

是否有可能得到原來的用戶對象(如,變量u)在do_something()方法內? (通過相關經理;通過方法傳遞參數並不是我所追求的。)

回答

2

管理人員只能直接連接到他們管理的模型。因此,在這種情況下,您的經理將連接到某事物,但不直接連接到用戶。

另外,管理員以查詢集開頭,而不是對象,所以你必須從那裏開始工作。

請記住,要將您的自定義方法與RelatedManager一起使用,您需要在Manager中設置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() 

上面應該只返回一個用戶,你可以添加一個不用彷徨()在最後得到的對象,而不是一個查詢集,但我喜歡返回的查詢集,因爲你可以繼續鏈接它們。

相關問題