Je le modèle suivant:Ajouter un champ supplémentaire dans Django QuerySet comme timedelta Type
class UptimeManager(models.Manager):
def with_length(self):
"""Get querySet of uptimes sorted by length including the current one. """
extra_length = Uptime.objects.extra(select={'length':
"""
SELECT
IF (end is null,
timestampdiff(second,begin,now()),
timestampdiff(second,begin,end))
FROM content_uptime c
WHERE content_uptime.id = c.id
"""
})
return extra_length
class Uptime(models.Model):
begin = models.DateTimeField('beginning')
end = models.DateTimeField('end', null=True) I call
host = models.ForeignKey("Host")
objects = UptimeManager()
...
j'appelle Uptime.objects.with_length().order_by('-length')[:10]
pour obtenir la liste des plus longues durées de fonctionnement. Mais le length
dans le modèle est de type entier. Comment modifier mon code comme la longueur de l'objet retourné par le gestionnaire serait accessible dans le modèle comme objet timedelta
? Je pourrais presque le faire en retournant une liste et en convertissant le nombre de secondes en timedelta
objets, mais ensuite je dois faire le tri, le filtrage etc. dans mon code Python qui est plutôt inefficace par rapport à une requête SQL bien faite.
Mais où exactement dois-je utiliser une propriété? Parce que je suis plutôt un novice à Django, donc je peux le voir;) – damienix