Size: a a a

Django [ru] #STAY HOME

2020 May 29

AD

Alex Dem in Django [ru] #STAY HOME
Suren Khorenyan
SELECT r.*
    , coalesce(SUM(cr_subq.field_a) - SUM(cr_subq.field_b), 0) AS field_result
FROM table_r r
LEFT JOIN (
   SELECT
          c_id
        , r_id
        , c.field_c * 0.05 AS field_a
        , c.field_c * 0.05 * r.percent / 100 AS field_b
   FROM table_cr cr
   JOIN table_r r on cr.r_id = r.id
   JOIN table_c c on cr.c_id = c.id
   WHERE status IN ('status1', 'status2')
) cr_subq on r.id = cr_subq.r_id
GROUP BY r.id
ORDER BY field_result DESC, r.id DESC
;


Где есть модели C, R и CR, где CR.c = models.OneToOneField(C, ..., а CR.r = models.ForeignKey(R, ...
это?
источник

SK

Suren Khorenyan in Django [ru] #STAY HOME
да
источник

AD

Alex Dem in Django [ru] #STAY HOME
да, я это видел
но это не модели/сериализаторы/вьюсеты
источник

SK

Suren Khorenyan in Django [ru] #STAY HOME
а
источник

SK

Suren Khorenyan in Django [ru] #STAY HOME
так, новый вопрос, а как вместо INNER JOIN сделать LEFT JOIN когда делаю annotate? чтобы включить и тех, у кого не найдено связанного?
источник

AD

Alex Dem in Django [ru] #STAY HOME
Suren Khorenyan
так, новый вопрос, а как вместо INNER JOIN сделать LEFT JOIN когда делаю annotate? чтобы включить и тех, у кого не найдено связанного?
если связанное поле is null, то оно и не должно попасть в выборку
связи-то, по факту, нет
если я тут окончательно не потерял рассудок))
источник

AD

Alex Dem in Django [ru] #STAY HOME
а тьфу
источник

AD

Alex Dem in Django [ru] #STAY HOME
я уже читаю и не понимаю что я читаю
источник

SK

Suren Khorenyan in Django [ru] #STAY HOME
Alex Dem
если связанное поле is null, то оно и не должно попасть в выборку
связи-то, по факту, нет
если я тут окончательно не потерял рассудок))
тогда я теряю записи из основной таблице. а мне нужно если там не найдено, тупо нули проставить
источник

AD

Alex Dem in Django [ru] #STAY HOME
вероятно, через case when можно намастерить
источник

AD

Alex Dem in Django [ru] #STAY HOME
foo=annotate(case when then .. else bullshit)
источник

ss

san_ sarabat in Django [ru] #STAY HOME
мне нужно при добавлении комента к посту отправлять юзеру что его пост прокоментировали, как ето реализовать в селери?
источник

AD

Alex Dem in Django [ru] #STAY HOME
san_ sarabat
мне нужно при добавлении комента к посту отправлять юзеру что его пост прокоментировали, как ето реализовать в селери?
скорее всего не лучший вариант, но

напиши функцию которая отправляет юзеру (для примера будет функция foo())
напиши post-save signal @receiver, в котором будет вызываться эта функция через celery: foo.delay()
источник

AD

Alex Dem in Django [ru] #STAY HOME
san_ sarabat
мне нужно при добавлении комента к посту отправлять юзеру что его пост прокоментировали, как ето реализовать в селери?
источник

ss

san_ sarabat in Django [ru] #STAY HOME
большое спасибо!
источник

SK

Suren Khorenyan in Django [ru] #STAY HOME
ха. я так понимаю, и нормального GROUP BY тоже нет. прекрасно просто. как с  этим вообще работать можно..
источник

SK

Suren Khorenyan in Django [ru] #STAY HOME
короч хапнул говна с джанго орм снова ))
придётся прикручивать как-то raw sql
так и не получилось сделать ы ORM виде. пытался через annotate, но как доходит до группировки, чтобы сложить значения колонок, так оказывается, что сгруппировать грубо говоря по айди просто нельзя
источник

S

Stanley in Django [ru] #STAY HOME
Suren Khorenyan
проблемой будет прикрутить пагинацию и фильтрацию. и если пагинация ещё изи, то как фильтрацию..
Просто raw запрос формируй строкой, а перед ним формируешь where по параметрам , потом конкатинируешь и выполняешь запрос
источник

SK

Suren Khorenyan in Django [ru] #STAY HOME
Stanley
Просто raw запрос формируй строкой, а перед ним формируешь where по параметрам , потом конкатинируешь и выполняешь запрос
придётся так
источник

S

Stanley in Django [ru] #STAY HOME
Suren Khorenyan
придётся так
Вот пример помотри 😄😄 https://pastebin.com/cHD6Cxtw
источник