2016-08-12 8 views
1

は、関連するモデルですまたがり:Djangoのカウントはここ

class WhatToWearCandidates(models.Model): 
    profile = models.ForeignKey(Profile, null=False, blank=False, related_name="outfit_candidates") 
    look = models.ForeignKey(StyleLook, null=False, blank=False, related_name="outfit_candidates") 

class StyleLook(models.Model): 
    # Non important attributes 

class LookItem(models.Model): 
    look = models.ForeignKey(StyleLook, null=False, blank=False, related_name="lookitems") 
    item = models.ForeignKey(Product, null=False, blank=False, related_name="looks") 

私は、各WhatToWearCandidatesがStyleLookとプロファイルを持って、各プロファイルのために、我々は彼らに正しいルックスを示し、これを説明します。 StyleLookはそれ自身の詳細を含んでいます。

各StyleLookはProductsで構成され、LookItemテーブルにはどのStyleLooksにどのProductsが含まれているかを接続します。

質問:4つ以下の製品を効率的に含むWhatToWearCandidatesを収集しようとしています。

私は[{'look__id': 15L, 'lcount': 1}]にデバッガall_candidates印刷物からDjangoのannotate()クラス

all_candidates = WhatToWearCandidates.objects.filter(
     look__lookitems__item__assignment=assignment.id, # This is to filter based on Products that belong in the current Assignment 
     profile_id=1, # Example profile 
     look_id=15 # Testing with 1 single look for the proper profile 
    ).values('look_id').annotate(lcount=Count('look__lookitems')) 

を使用しようとしています。私はこの外観に6つの製品が含まれているので、lcountは6と予想されています。

もう一度チェックするには、StyleLookから同様のクエリを試しました。

StyleLook.objects.filter(id__in=[15]).values('id').annotate(lcount=Count('lookitems')) 

これは[{'id': 15L, 'lcount': 6}]を返します。

私は間違っていますか? WhatToWearCandidatesクエリでlcountを6にするにはどうすればよいですか?

+0

私が望むデータへのアクセス方法を再設計しました。 –

答えて

0

あなたのモデルのいずれかでdefault orderingの問題が発生している可能性があります。クエリの末尾に.order_by()を追加してみてください。

all_candidates = WhatToWearCandidates.objects.filter(
    look__lookitems__item__assignment=assignment.id, 
    profile_id=1, 
).values('look_id').annotate(lcount=Count('look__lookitems')).order_by() 
関連する問題