Использование map () для _set в шаблоне? - PullRequest
0 голосов
/ 27 декабря 2010

У меня есть две модели, подобные этой:

class KPI(models.Model):
    """KPI model to hold the basic info on a Key Performance Indicator"""
    title = models.CharField(blank=False, max_length=100)
    description = models.TextField(blank=True)
    target = models.FloatField(blank=False, null=False)
    group = models.ForeignKey(KpiGroup)
    subGroup = models.ForeignKey(KpiSubGroup, null=True)
    unit = models.TextField(blank=True)
    owner = models.ForeignKey(User)
    bt_measure = models.BooleanField(default=False)

class KpiHistory(models.Model):
    """A historical log of previous KPI values."""
    kpi = models.ForeignKey(KPI)
    measure = models.FloatField(blank=False, null=False)
    kpi_date = models.DateField()

и я использую RGraph для отображения статистики на внутренних настенных панелях. Удобно то, что списки Python выводятся в формате, который Javascript рассматривает как массив, поэтому путем сопоставления всех значений в списке как это:

def f(x): return float(x.measure)
stats = map(f, KpiHistory.objects.filter(kpi=1)

тогда в шаблоне я могу просто использовать

{{ stats }}

и код RGraph видит его как массив, который является именно тем, что я хочу.

[87.0, 87.5, 88.5, 90]

Таким образом, мой вопрос заключается в следующем: есть ли способ добиться того же эффекта, используя функцию _set Django, чтобы сохранить объем данных, которые я передаю в шаблон, до тех пор, пока я не передавал один объект KPI? чтобы быть в графике, но теперь я хочу передать целую кучу, так что я могу сделать что-нибудь с _set

{{ kpi.kpihistory_set }}

выводит всю модель, но я просто хочу поле измерения.

Я не вижу ни одного из встроенных шаблонных методов, которые позволили бы мне выделить только одно поле, которое я хочу.

Как другие люди справились с этой ситуацией?

1 Ответ

0 голосов
/ 27 декабря 2010

Вероятно, вы должны выполнять логику, чтобы решить, какие экземпляры следует отображать в конкретном запросе в функции представления, а не в шаблоне.

...