Size: a a a

Django [ru] #STAY HOME

2018 December 26

PB

Petr B. in Django [ru] #STAY HOME
Alexandr Artemyev
Тут прям если уж очень хочется вернуть кверисет его можно проанотировать
Ты не переопределишь поле модели в аннотации :))) filteredrelation разве что
источник

AA

Alexandr Artemyev in Django [ru] #STAY HOME
Petr B.
Ты не переопределишь поле модели в аннотации :))) filteredrelation разве что
так не призываю переопределять. просто дополнительно вернуть модифицированных филдов и использовать их
источник

p

pavel in Django [ru] #STAY HOME
Alexandr Artemyev
почему ты не можешь при отображении этого кверисета применить эту свою магию с подменой одних цифр на другие?
это вопрос?)
источник

A

Aquinary in Django [ru] #STAY HOME
Petr B.
Агась, например так
Меня это устроит) Вынес mixins.py в отдельный файл, чтобы в моделях определялись только поля и связи)
Благодарю)
источник

p

pavel in Django [ru] #STAY HOME
через анотейт пробовал,
queryset = queryset.annotate(prices__price=Case(
               When(prices__currency='RUB', then=F('prices__price') * rates['RUB']),
               When(prices__currency='USD', then=F('prices__price') * rates['USD']),
               When(prices__currency='EUR', then=F('prices__price') * rates['EUR']),
               output_field=DecimalField()
           ))
источник

p

pavel in Django [ru] #STAY HOME
там связные модели у меня
источник

PB

Petr B. in Django [ru] #STAY HOME
Alexandr Artemyev
нельзя возвращать list если у тебя метод называется get_queryset :)
Вообще, строго говоря, в том же drf совершенно нормально в get_queryset, get_serializer_context и get_serializer_class в зависимости от self.action свою логику крутить
источник

p

pavel in Django [ru] #STAY HOME
Petr B.
Вообще, строго говоря, в том же drf совершенно нормально в get_queryset, get_serializer_context и get_serializer_class в зависимости от self.action свою логику крутить
дрв как раз у меня))
источник

PB

Petr B. in Django [ru] #STAY HOME
Petr B.
Вообще, строго говоря, в том же drf совершенно нормально в get_queryset, get_serializer_context и get_serializer_class в зависимости от self.action свою логику крутить
И, соответственно, если в методе, соответствующему этому экшену, ты ничего не делаешь с кверисетом - вполне нормально вернуть лист
источник

AA

Alexandr Artemyev in Django [ru] #STAY HOME
pavel
через анотейт пробовал,
queryset = queryset.annotate(prices__price=Case(
               When(prices__currency='RUB', then=F('prices__price') * rates['RUB']),
               When(prices__currency='USD', then=F('prices__price') * rates['USD']),
               When(prices__currency='EUR', then=F('prices__price') * rates['EUR']),
               output_field=DecimalField()
           ))
ну вот. анотейт есть, это хорошийи правильный  подход в данном случае. добивай
источник

PB

Petr B. in Django [ru] #STAY HOME
Petr B.
И, соответственно, если в методе, соответствующему этому экшену, ты ничего не делаешь с кверисетом - вполне нормально вернуть лист
И логично, потому что потом ты не будешь копипастить свою кастомную логику в другой метод, а просто поправишь условие в гет_кверисет
источник

p

pavel in Django [ru] #STAY HOME
Alexandr Artemyev
ну вот. анотейт есть, это хорошийи правильный  подход в данном случае. добивай
не понятно правильно ли я пишу такие связи типо annotate(prices__price ...) ?
источник

PB

Petr B. in Django [ru] #STAY HOME
pavel
через анотейт пробовал,
queryset = queryset.annotate(prices__price=Case(
               When(prices__currency='RUB', then=F('prices__price') * rates['RUB']),
               When(prices__currency='USD', then=F('prices__price') * rates['USD']),
               When(prices__currency='EUR', then=F('prices__price') * rates['EUR']),
               output_field=DecimalField()
           ))
Работает?)
источник

p

pavel in Django [ru] #STAY HOME
Petr B.
Работает?)
как бы должен) но не перевел в выводе данные
источник

AA

Alexandr Artemyev in Django [ru] #STAY HOME
Petr B.
И, соответственно, если в методе, соответствующему этому экшену, ты ничего не делаешь с кверисетом - вполне нормально вернуть лист
если у тебя mypy стоит он не очень обрадуется возвращению list вместо queryset. Работать то будет согласен. Но лучше всеж сделать так чтоб методы делали то что декларируют
источник

NK

ID:531453784 in Django [ru] #STAY HOME
Dmitry будет жить. Поприветствуем!
источник

PB

Petr B. in Django [ru] #STAY HOME
Alexandr Artemyev
если у тебя mypy стоит он не очень обрадуется возвращению list вместо queryset. Работать то будет согласен. Но лучше всеж сделать так чтоб методы делали то что декларируют
А если у меня в нескольких вьюхах во вьюсете отдается закешированный ответ апи стороннего сервиса?
источник

PB

Petr B. in Django [ru] #STAY HOME
В дрф гет_кверисет не очень удачно назван, к сожалению
источник

AA

Alexandr Artemyev in Django [ru] #STAY HOME
pavel
через анотейт пробовал,
queryset = queryset.annotate(prices__price=Case(
               When(prices__currency='RUB', then=F('prices__price') * rates['RUB']),
               When(prices__currency='USD', then=F('prices__price') * rates['USD']),
               When(prices__currency='EUR', then=F('prices__price') * rates['EUR']),
               output_field=DecimalField()
           ))
prices__price такого имени быть не может. подчеркивание может быть только одно. двойное значит совершенно другие вещи. rates['USD'] нельзя просто умножить на что-то. нужно засунуть ещё в Value()
но направление у тебя правильное
источник

PB

Petr B. in Django [ru] #STAY HOME
Petr B.
В дрф гет_кверисет не очень удачно назван, к сожалению
Но это компромисс конечно, учитывая то, что фильтрация и пагинация ещё после гет_кверисет идет
источник