Size: a a a

Django [ru] #STAY HOME

2020 May 23

А

Алексей in Django [ru] #STAY HOME
Я могу это применить для Models в файле models? что бы через админку добавлять
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Алексей
Я могу это применить для Models в файле models? что бы через админку добавлять
смотря где в models.py
источник

AD

Alex Dem in Django [ru] #STAY HOME
Artem Gubatenko
Переслано от Artem Gubatenko
Есть две модели Item -> m2m -> Location (MPTT)

Хочу аннотировать, при запросе к Item, поле: взять из всех связанных `Location` поле `title`, обрезать  значение до 6 символов и объединить в одну строку

Попробовал StringAgg(), но она склеивает лишние значения, не понятно по какому критерию отобранные.

Кто-нибудь знает в чем может быть проблема?
у меня нет постгреса под рукой чтобы затестить
StringAgg действительно в оригинале собирает всю в одну строку
для обрезки можно использовать
from django.db.models.functions import Substr

Может этот неполный и неидеальный пример тебе поможет

Deal.objects.annotate(foo=Substr('deal_shared_teammates__email', 1, 6)).filter(foo__isnull=False).values('foo')
-> <DealQuerySet [{'foo': 'email1'}, {'foo': 'email2'}]>

где deal_shared_teammates m2m поле
__email - аналог твоей location
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Alex Dem
у меня нет постгреса под рукой чтобы затестить
StringAgg действительно в оригинале собирает всю в одну строку
для обрезки можно использовать
from django.db.models.functions import Substr

Может этот неполный и неидеальный пример тебе поможет

Deal.objects.annotate(foo=Substr('deal_shared_teammates__email', 1, 6)).filter(foo__isnull=False).values('foo')
-> <DealQuerySet [{'foo': 'email1'}, {'foo': 'email2'}]>

где deal_shared_teammates m2m поле
__email - аналог твоей location
проблем с обрезкой нет.
Проблема в том, что StringAgg не верно объединяет/отбирает для объинения поля title
источник

AD

Alex Dem in Django [ru] #STAY HOME
Artem Gubatenko
проблем с обрезкой нет.
Проблема в том, что StringAgg не верно объединяет/отбирает для объинения поля title
StringAgg не должен ничего отбирает, только соединяет
Надо смотреть запрос до StringAgg
источник

AD

Alex Dem in Django [ru] #STAY HOME
В оригинальной постгре ты просто скармливаешь функции выборку полей, и она тебе формирует один конечный стринг
так это работает
я думаю, в джанго аналогично
источник

AD

Alex Dem in Django [ru] #STAY HOME
Непростая задача, конечно
На raw sql решается за 5 минут, но в ORM черт ногу сломит в таких задачах :)))
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Alex Dem
StringAgg не должен ничего отбирает, только соединяет
Надо смотреть запрос до StringAgg
https://gist.github.com/Ingco/d2c97137e471cb64e9e5b66816b493b8

в briefly_locations, там где должно объединить 2 значения, собирает от 2 до ~8, вариантно
Тогда как locations привязано максимум 2
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Alex Dem
Непростая задача, конечно
На raw sql решается за 5 минут, но в ORM черт ногу сломит в таких задачах :)))
вот не хотелось бы использовать raw :)
Это проблема чисто эстетичекого плана: хочется, формирование строки, возложить на БД
источник

AD

Alex Dem in Django [ru] #STAY HOME
Artem Gubatenko
вот не хотелось бы использовать raw :)
Это проблема чисто эстетичекого плана: хочется, формирование строки, возложить на БД
да, я понимаю :)
сорри, я ОРМ знаю посредственно, не смогу помочь наверное
отдельные функциональные части даже не знал :D

quantity_sum=Sum(
       "quantity_trans__quantity",
       filter=Q(quantity_trans__item_id=F("pk")),
       output_field=DecimalField(),
   ),

например, что можно сделать саб-фильтрацию в SUM, круто!
источник

WD

Web Dragon in Django [ru] #STAY HOME
Здравствуйте, подскажите в чем проблема ?
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Alex Dem
да, я понимаю :)
сорри, я ОРМ знаю посредственно, не смогу помочь наверное
отдельные функциональные части даже не знал :D

quantity_sum=Sum(
       "quantity_trans__quantity",
       filter=Q(quantity_trans__item_id=F("pk")),
       output_field=DecimalField(),
   ),

например, что можно сделать саб-фильтрацию в SUM, круто!
это работает чуть ли не для всех агрегационных функций по-моему
спасибо, за попытку помощи)
источник

AD

Alex Dem in Django [ru] #STAY HOME
Artem Gubatenko
это работает чуть ли не для всех агрегационных функций по-моему
спасибо, за попытку помощи)
:)
на выходе все равно получается какой-то запрос в БД, готовый query
Я бы его еще глянул, чтобы понять хотя бы что не так
источник

AD

Alex Dem in Django [ru] #STAY HOME
Web Dragon
Здравствуйте, подскажите в чем проблема ?
какая-то либа обращается к несуществующей джанго-функции
очень похоже на проблему совместимости/зависимостей
источник

AD

Alex Dem in Django [ru] #STAY HOME
Web Dragon
Здравствуйте, подскажите в чем проблема ?
почитай requirements этой библиотеки, посмотри с какими версиями джанго она работает
источник

AD

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

WD

Web Dragon in Django [ru] #STAY HOME
Спасибо уважаемый
источник

AD

Alex Dem in Django [ru] #STAY HOME
Web Dragon
Спасибо уважаемый
вообще python_2_unicode_compatible в джанго уже давно и вроде бы еще до сих пор (но это не точно)
какая версия джанго стоит?
источник

AD

Alex Dem in Django [ru] #STAY HOME
https://github.com/pennersr/django-allauth/issues/2466

судя по комментам, убрали в django3.0
источник

WD

Web Dragon in Django [ru] #STAY HOME
Alex Dem
вообще python_2_unicode_compatible в джанго уже давно и вроде бы еще до сих пор (но это не точно)
какая версия джанго стоит?
третья и кмс третья, в доках написано что используется на третьем, откуда этот импорт я не в курсе.
источник