Bonjour à tous,
Je fabrique un aggrégateur d'objets à vendre. Le contenu me provient de
plusieurs sources qui certaines fois sont disponibles en plusieurs langues,
d'autres fois non. J'ai donc une relation 1..n entre mes objets (classe Thing
dans l'exemple) et leur description.
Mes modèles ressemblent à ceci:
class Thing(models.Model):
price = models.DecimalField(max_digits=7, decimal_places=2, null=True,
blank=True)
illustration = models.ImageField(upload_to=settings.OBJ_MEDIA, blank=True)
class Description(models.Model):
thing = models.ForeignKey(Thing)
title = models.CharField(max_length=512)
language = models.CharField(max_length=2, choices=LANGUAGES, null=True,
blank=True, index=True)
Mon problème est d'obtenir le meilleur langage lors du rendu. On pourrait
imaginer un truc du genre:
class Thing(models.Model):
...
def get_best_description(self, lang):
try:
return Description.objects.filter(thing=self, language=lang)
except Description.DoesNotExist:
return Description.objects.all[0]
Mais si je place ce code au milieu d'une template de type liste, on va obtenir
autant de requêtes SQL qu'il n'y a d'objets, ce qui n'est pas très malin... Je
pense bien qu'il me faut un select_related, mais le code de la template devient
alors un peu trop obscur pour moi.
On pourrait également penser mettre en cache des couples thing.id, langue =>
html préformaté au moment de la création de chaque objet, est-ce là la seule
solution?
Avez-vous déjà rencontré ce genre de problème? Y a-t-il une bonne pratique pour
cela?
Merci d'avance de vos lumières!
Gregory Favre
_______________________________________________
django mailing list
[email protected]
http://lists.afpy.org/mailman/listinfo/django