IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Lukáš
Tvůrce
Avatar
Lukáš:27.1.2020 20:53

Ahoj, potřeboval bych pomoct sestavit dotaz na databázi přes model. Používám Django 2.2.5 s MySQL databází

models.py

class Amodel(models.Model):
    group = models.ForeignKey('groups.Group', on_delete=models.CASCADE)
    date_time = models.DateTimeField(auto_now_add=True)

Zkusil jsem: Dokážu si to vytáhnout zhruba takhle..

Amodel.objects.filter(...).values('group_id').order_by('group_id').annotate(date_time_max=Max('date_time'))

Ale to vytáhne pouze 'group_id' a 'date_time_max', já potřebuji celou instanci modelu

V MySQL dotazu by to vypadalo takto:

SELECT m.*
FROM my_table m
  JOIN (
   SELECT group_id, max(date_time) as max_date
   FROM my_table
   GROUP BY group_id
  ) as s on m.group_id=s.group_id and m.date_time=s.max_date

Chci docílit: Data:

ID group_id date_time
1 1 2020-01-27 19:51:46.603859
2 2 2020-01-26 18:40:24.301419
3 1 2020-01-27 20:14:11.123860
4 2 2020-01-27 05:20:21.507901

Já chci dostat:

ID group_id date_time
3 1 2020-01-27 20:14:11.123860
4 2 2020-01-27 05:20:21.507901

Snažím se to optimalizovat jelikož teď musím vytahovat data ve for loopu a každá iterace udělá dotaz na databázi a pak to trvá nesmyslný množství času..

Díky moc všem!

 
Odpovědět
27.1.2020 20:53
Avatar
Lukáš
Tvůrce
Avatar
Lukáš:27.1.2020 21:12

^ Koukám, že jsem vlastně vůbec nenapsal slovy co chci.. :-D
Takže snažím se vytáhnout data pro každou group_id s nejnovějším date_time.

 
Nahoru Odpovědět
27.1.2020 21:12
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.