2017-05-11 9 views
0

私はDjangoの最初のステップを実行していますが、現在のところそれ以上の問題は解決できません。1つのビューで複数のモデルにアグリゲーションとトラックバックをするDjango

class Categories(models.Model): 
    name = models.CharField() 

class Inventories(models.Model): 
    name = models.CharField(unique = True) 
    unit = models.CharField() 
    category = models.ForeignKey(Categories) 

class Suppliers(models.Model): 
    name = models.CharField() 

class InventoryReceiving (models.Model): 
    name = models.ForeignKey(Inventories, related_name='item_received') 
    quantity = models.DecimalField(max_digits=6, decimal_places=2) 
    supplier = models.ForeignKey(Suppliers, related_name = 'item_supplier') 

私が個別の値と集計数量フィールドを取得するInventoryReceivingでGROUP_BY名を希望:私たちは、次のデータスキームを持っている想像してみてください。次に、関係を追跡し、単一のgrouped_by名前テーブルを人間が読めるの名前、ユニット、カテゴリー、サプライヤー、および数量のラベルで取得します。

私はNAME_ID(私は関連テーブルから名前を必要とする)との和を返す表現を思い付いた:私はあなたがちょうどあなたが必要とする関連データの残りの部分を追加することができると思い

inventory_list = InventoryReceiving.objects\ 
        .values('name')\ 
        .annotate(agg_sum=Sum('quantity')) 
+0

'values()'の 'name'ではなく' name__name'はどうでしょうか? – itzMEonTV

+0

それは素晴らしいアドバイスです、ありがとう!しかし、私はdjangoのドキュメントで 'name__name'の使用法の説明を見つけられませんでした。私を指差してもらえますか? – webcosta

答えて

0

InventoryReceiving.objects.values(
    'name__name',   #Inventories.name 
    'name__unit',   #Inventories.unit 
    'name__category__name', #Inventories.category.name 
    'supplier__name'  #Suppliers.name 
).annotate(agg_sum=Sum('quantity')) 
+0

素晴らしい!できます。どうもありがとう。 'name__name'の使い方が記述されているdjangoのドキュメントのところで私を指摘してもらえますか?私はそれを発見していない。 – webcosta

+0

[関係をまたぐルックアップ](https://docs.djangoproject.com/en/1.11/topics/db/queries/#lookups-that-span-relationships)。あなたの 'ForeignKey'を' name'と名付けたので、 'name__name'です。それが何か他のものだった場合。 'inventory'なら' inventory__name'になります。 – Todor

+0

ありがとう!あなたのアドバイスは本当に役に立ちました – webcosta

関連する問題