Дополнительные вычисляемые поля в модели - PullRequest
0 голосов
/ 12 февраля 2011

У меня есть две простые модели в моем приложении Django. Вот как они выглядят:

class Host(models.Model):
    url = models.URLField(max_length= 200)
    ssl = models.BooleanField(default = False)

class Query(models.Model):
    host = models.ForeignKey(Host)
    date = models.DateTimeField(auto_now_add = True)
    latency = models.FloatField(null = True)
    success = models.BooleanField(default = False)
    error = models.CharField(max_length= 2000, null = True)

Когда я получаю доступ к модели Host, у меня есть доступ только к двум полям url и ssl. При запросе модели Host я бы хотел, чтобы три дополнительных поля были вычислены и возвращены в dyanmicaly. Это average_latency, которое будет средним значением поля ненулевой задержки всех дочерних Query записей, чтобы я мог получить к нему что-то вроде этого:

t = Tracker.objects.get(id = 1)
t.url
t.average_latency

Может кто-нибудь объяснить, как я могу это сделать, или указать на некоторые примеры / документацию?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 12 февраля 2011

Вы можете просто использовать свойства класса :

class Host(models.Model):
    .
    .
    .
    @property
    def average_latency(self):
        # calculate latency from Query model ...
        return latency

Имейте в виду, что это свойство только для чтения.

1 голос
/ 12 февраля 2011

Вы можете проверить django-denorm , это в значительной степени о том, что вы пытаетесь достичь.У меня также есть некоторые воспоминания о том, что есть другие подобные приложения django.

...