@bituke

Как получить отфильтрованные данные по клиентам в django?

модель портфеля
class Portfolio(models.Model):
	client = models.ForeignKey(Client, on_delete=models.CASCADE, related_name='portfolio')
	name = models.CharField('название', max_length=255)
	initial_investment_amount = models.PositiveIntegerField('начальная сумма инвестиций',)
	investment_horizon = models.PositiveIntegerField('инвестиционный горизонт',)
	type_investor = models.PositiveSmallIntegerField('тип инвестора', choices=TYPE_INVESTOR)
	currency = models.PositiveSmallIntegerField('валюта', choices=CURRENCY)
	maximum_allowable_drawdown = models.PositiveIntegerField('максимально допустимая просадка',)
	type_according_risk_reward = models.PositiveSmallIntegerField('тип по соотношению риска/прибыли', choices=TYPE_RISK)
	focus = models.PositiveSmallIntegerField('фокус', choices=FOCUS)
	types_assets = models.PositiveSmallIntegerField('тип акций', choices=TYPE_ASSETS)
	ETF = models.PositiveSmallIntegerField(choices=ETF)
	active = models.BooleanField()


формирование списка клиентов
all_clients = Client.objects.filter(investmen=investmen)


Задача получить в шаблоне все портфели с статусом active=True и тоже самое с active=False.
в шаблоне есть цикл:
{% for i in all_clients %}
    {{ i.portfolio.count }}
{% endfor %}

И он выводит все портфели, а нужно что бы он выводил только портфели с статусом active=True.
Большое спасибо, если поможете.
  • Вопрос задан
  • 85 просмотров
Пригласить эксперта
Ответы на вопрос 2
AlexNest
@AlexNest
Работаю с Python/Django
С помощью фильтров
@register.filter
def get_active_portfolio_items(client):
    return Portfolio.objects.filter(client=client, active=True)

В шаблоне пройтись как по обычному кверисету.
{% for port in  i|get_active_portfolio_items%} 
    {{ port}}
{% endfor %}
Ответ написан
Комментировать
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Можно в контекст шаблона отдавать уже отфильтрованные данные - all_clients.filter(active=True)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы