sql >> Databasteknik >  >> RDS >> Mysql

Django-fråga i One to Many-relationen

Detta är inte något du kan eller bör försöka uppnå med en frågeuppsättningsannotering. Detta beror på att kommentarer endast är användbara för aggregeringsfunktioner som Count , Sum etc.

Om jag förstått din fråga rätt kan du få denna information när du itererar över frågeuppsättningen:

for order in Order.objects.all():
    types = order.details.values_list('product_type', flat=True)

Du kan göra detta mer effektivt genom att förhämta den relaterade OrderDetail rader för varje beställning:

for order in Order.objects.prefetch_related('details'):
    types = order.details.values_list('product_type', flat=True)

Alternativt kan du hämta några värden från varje beställning med den här metoden:

queryset = Order.objects.values('id', 'user_id', 'details__product_type')

Det bör göra en enda db-fråga. Se dock anteckningarna här om hur detta fungerar:https:/ /docs.djangoproject.com/en/1.9/ref/models/querysets/#values

Din frågeuppsättning kommer att mata ut dikter istället för modellinstanser. Och du kommer inte att få en bra lista över product_type s... istället får du upprepade rader som:

[
    {'id': 1, 'user_id': 1, 'product_type': 'chair'},
    {'id': 1, 'user_id': 1, 'product_type': 'table'},
    {'id': 2, 'user_id': 3, 'product_type': 'chair'},
    ...
]

...så du måste sedan gruppera dessa rader i python i den datastruktur du vill ha:

from collections import OrderedDict

grouped = OrderedDict()
for order in Order.objects.values('id', 'user_id', 'details__product_type'):
    if order['id'] not in grouped:
        grouped[order['id']] = {
            'id': order['id'],
            'user_id': order['user_id'],
            'types': set(),
        }
    grouped[order['id']]['types'].add(order['details__product_type'])


  1. ÄNDRA KOLUMN i Oracle - Hur kontrollerar jag om en kolumn är nullbar innan den ställs in på nullbar?

  2. Det går inte att konvertera MySQL datum/tid värde till System.DateTime. Kunde inte lagra 0/0/0000 0:00:00 värde?

  3. Korrekt bevarade beräknade kolumner

  4. PDO flera namngivna platshållare hämtar inte data