Size: a a a

Django [ru] #STAY HOME

2019 October 18

RP

Ruslan Popov in Django [ru] #STAY HOME
пробовал экзотику:
qs = qs.annotate(
   total_install=Coalesce(
       Count(
           Case(
               When(rewards__content_type=install_ctype,
                    rewards__visit_id=OuterRef('pk'),
                    then=1),
               output_field=models.IntegerField())), Value(0)),
источник

DT

Dan Tyan in Django [ru] #STAY HOME
есть вариант


qs.annotate(
cnt_c=Count(gfk_id, filter=Q(content_type=C_content_type)),
cnt_d=Count(gfk_id, filter=Q(content_type=D_content_type)),
cnt_e=Count(gfk_id, filter=Q(content_type=E_content_type)),
)
источник

RP

Ruslan Popov in Django [ru] #STAY HOME
рабочий?
источник

DT

Dan Tyan in Django [ru] #STAY HOME
оба должны работать =)
источник

RP

Ruslan Popov in Django [ru] #STAY HOME
gfk_id - это что?
источник

DT

Dan Tyan in Django [ru] #STAY HOME
второй кажется менне производителен
но вывод более удобный
источник

RP

Ruslan Popov in Django [ru] #STAY HOME
у меня получилось с subquery
источник

DT

Dan Tyan in Django [ru] #STAY HOME
Ruslan Popov
gfk_id - это что?
для GenericForeignKey нужно два поля
id и content_type
источник

DT

Dan Tyan in Django [ru] #STAY HOME
gfk это поле GenericForeignKey
источник

RP

Ruslan Popov in Django [ru] #STAY HOME
т.е. ты про OuterRef
источник

DT

Dan Tyan in Django [ru] #STAY HOME
не нужен там outerref
источник

DT

Dan Tyan in Django [ru] #STAY HOME
не если делать с subquery то нужен скорее всего
источник

DT

Dan Tyan in Django [ru] #STAY HOME
я про вариант с тремя коунтами
источник

RP

Ruslan Popov in Django [ru] #STAY HOME
не понимаю, что ты хочешь сказать
источник

RP

Ruslan Popov in Django [ru] #STAY HOME
Упростил задачу, B -gfk-> C,D,E
Ищу по B
источник

RP

Ruslan Popov in Django [ru] #STAY HOME
qs = qs.annotate(
   total_install=Count('object_id', filter=Q(content_type=install_ctype))
   )
источник

DT

Dan Tyan in Django [ru] #STAY HOME
в смысле делаешь выборку по моделе B ?
источник

RP

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

DT

Dan Tyan in Django [ru] #STAY HOME
Ruslan Popov
qs = qs.annotate(
   total_install=Count('object_id', filter=Q(content_type=install_ctype))
   )
так не работает ?
источник

RP

Ruslan Popov in Django [ru] #STAY HOME
выдаёт 8 вариантов... на пять записей
источник