1

私は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]

ループして、ファイルを共有しているユーザー名を見つけることができるように、それらに参加したいと思います。

4

2 に答える 2

0

関連するオブジェクトを 1 つのクエリで使用select_related()およびフェッチできます (クエリでのリスト内包表記を回避できます)。

前の質問のようにモデル定義を使用すると仮定しました:

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
于 2013-03-18T17:21:58.273 に答える
0

STL の itertools チェーンを使用http://docs.python.org/2/library/itertools.html#itertools.chain

chain(file1, shared_username)
于 2013-03-18T17:22:11.843 に答える