我在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 :(得分:0)
您可以使用select_related()
并在一个查询中获取相关对象(并避免使用查询进行列表推导):
我假设在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
答案 1 :(得分:0)
使用STL http://docs.python.org/2/library/itertools.html#itertools.chain
中的itertools链chain(file1, shared_username)