2014-09-22 234 views
0

我正在使用事件日誌插件,我試圖從日誌模型中過濾一個查詢集,雖然我似乎無法讓它工作。Django過濾器模型查詢集

我的模型(這是簡化了相關性,但重要的信息有):

class User (model.Models) 
    standard User Registration data 


class UserProfile(model.Models) 
    user = models.OneToOneField(User) 
    user_company = models.ForeignKey('Company') 


class Company(models.Model) 
    name = models.CharField(max_length=50) 


class Log(models.Model) 
    user = models.ForeignKey('User') 

我想過濾來自同一家公司的當前用戶的所有日誌。我一直在嘗試使用:

user_company = request.user.profile.user_company 
log = Log.objects.filter(user=user_company) 

但沒有運氣。我錯過了什麼?

+0

您正在比較用戶與用戶公司 – cor 2014-09-22 16:32:19

+0

如何通過比較request.user.profile.user_company與Log的用戶外鍵來進行過濾?就像log = Log.objects.filter(log.user.profile.user_company = user_company)? – dmic23 2014-09-22 16:51:51

回答

2

相反的:

log = Log.objects.filter(user=user_company) 

嘗試:

log = Log.objects.filter(user__userprofile__user_company=user_company) 

您開始使用日誌對象,所以你必須與關係倒退工作你有。日誌與用戶相關聯,該用戶與UserProfile相關,後者包含user_company。因此,如果您要過濾日誌查詢集,則查找將從user - userprofile - user_company開始。每個之間的雙下劃線告訴ORM尋找相關的字段。

這應該爲您提供關聯用戶是您定義的user_company的成員的所有日誌,您將通過該請求獲取該日誌。

我不是數據庫嚮導,但這看起來像是一個非常強烈的查找給我。也許你可以削減一個步驟,並通過將日誌關聯到用戶配置文件而不是用戶來減輕負載?

+0

是的,就是這樣!謝謝您的幫助。 – dmic23 2014-09-22 17:01:11

0

您應該按用戶進行過濾,而不是由用戶公司進行過濾。

試試這個:

log = Log.objects.filter(user=request.user) 
+0

我試圖過濾當前用戶公司的所有日誌。您的回答只能由當前用戶過濾。 – dmic23 2014-09-22 16:24:43

+0

但是在你的模特里,你與公司沒有任何關係。模型記錄是否正確? – 2014-09-22 16:30:39

+0

公司與用戶資料相關。 – dmic23 2014-09-22 16:45:54