2013-03-18 38 views
1

我有這樣的查詢在Django:如何在Django中加入這兩個查詢?

shared_file = File.objects.filter(id__in= Share.objects.filter(users_id = log_id).values_list('files', flat=True)).annotate(count=Count('share__shared_user_id')) 
file1 = [i.file_name for i in shared_file] 

shared_username = [User.objects.filter(id__in= Share.objects.filter(users_id = log_id, files__file_name=k).values_list('shared_user_id', flat=True)).values_list('username') for k in file1] 

我想加入他們,這樣我可以通過它循環,並找到與他們通過共享文件的用戶名。

回答

0

您可以使用select_related()和一個查詢中獲取相關的對象(避免與查詢列表理解):

我認爲使用模式definiton作爲your previous question

class Share(models.Model): 
    users = models.ForeignKey(User) 
    files = models.ForeignKey(File) 
    shared_user_id = models.IntegerField() 
    shared_date = models.TextField() 

您可以獲取股份用戶和文件一次性使用:

shares = Share.objects.select_related('users', 'files').filter(users_id = log_id).all() 

for share in shares: 
    share    # Share model 
    share.users  # User model 
    share.files  # File model