Vous n'êtes pas identifié(e).
Bonjour,
Voilà je débute sous django et cela fait quelques jours que je bloque sur cette question:
Un extrait de mes models:
class Entretien(models.Model):
culture = models.ForeignKey(Culture)
date = models.DateField()
def __unicode__(self):
return 'Entretien -' + str(self.date)
class Arrosage(Entretien):
volume = models.IntegerField()
def __unicode__(self):
return 'Arrosage -' + str(self.date)
class Coupe(Entretien):
coupe = models.CharField(max_length=100)
def __unicode__(self):
return 'Coupe -' + str(self.date)
Rapidement, l'application permettrait de gérer une culture. Culture que l'on peut entretenir (arroser, couper, engraisser...), le but étant de générer un carnet de bord. Voici ce que j'aimerai faire dans ma vue:
...
entretiens = Entretien.objects.all().order_by('date')[:5]
...
return render_to_response('core/index.html', entretiens)
Je voudrais obtenir les 5 derniers entretiens d'un utilisateur. Le problème c'est qu'en faisant cela je n'obtient que des objets de type Entretien! Or je voudrais obtienir des objets de type Arrosage et Coupe (polymorphisme). Comment faire?
Faut-il absolument installer le django-model-utils? (InheritanceCastModel)
Merci.
Hors ligne
salut,
un foreign key sur User dans Entretien, ça ne convient pas ?
a+
On Sun, 05 Feb 2012 14:35:38 +0000, Maxime wrote:
> Bonjour,
>
> Voilà je débute sous django et cela fait quelques jours que je
bloque
> sur cette question:
>
> Un extrait de mes models:
>
class Entretien(models.Model):
> culture =
models.ForeignKey(Culture)
> date = models.DateField()
>
> def
__unicode__(self):
> return 'Entretien -' + str(self.date)
>
> class
Arrosage(Entretien):
> volume = models.IntegerField()
>
> def
__unicode__(self):
> return 'Arrosage -' + str(self.date)
>
> class
Coupe(Entretien):
> coupe = models.CharField(max_length=100)
>
> def
__unicode__(self):
> return 'Coupe -' + str(self.date)
>
>
>
Rapidement, l'application permettrait de gérer une culture. Culture
que
> l'on peut entretenir (arroser, couper, engraisser...), le but
étant de
> générer un carnet de bord. Voici ce que j'aimerai faire dans
ma vue:
>
>
...
> entretiens =
Entretien.objects.all().order_by('date')[:5]
> ...
> return
render_to_response('core/index.html', entretiens)
>
> Je
voudrais obtenir les 5 derniers entretiens d'un utilisateur. Le
>
problème c'est qu'en faisant cela je n'obtient que des objets de type
>
Entretien! Or je voudrais obtienir des objets de type Arrosage et
Coupe
> (polymorphisme). Comment faire?
>
> Faut-il absolument
installer le django-model-utils? (InheritanceCastModel)
>
> Merci.
>
_______________________________________________
> django mailing list
>
django _AT_ lists.afpy.org [1]
>
http://lists.afpy.org/mailman/listinfo/django [2]
Links:
------
[1]
mailto:django _AT_ lists.afpy.org
[2]
http://lists.afpy.org/mailman/listinfo/django
Hors ligne
Ah, excusez moi je me suis mal exprimé. Le lien avec un utilisateur est déjà présent dans culture: un utilisateur possède un ensemble de cultures. Une culture possède un ensemble d'entretiens. Maintenant, ce que j'aimerai c'est que dans la page "mes entretiens", l'utilisateur puisse voir les entretiens qu'il a fait sur ses cultures. Mais ne nous préoccupons pas du côté utilisateur. Simplement, j'aimerai que:
Entretien.objects.all().order_by('date')[:5]
me retourne une liste d'objets de type Arrosage et Coupe (classe filles) et non pas de type Entretien (classe mère).
Est-ce possible?
Hors ligne
Le 5 février 2012 17:23, Amirouche Boubekki
<amirouche.boubekki _AT_ gmail.com>a écrit :
>
> me retourne une liste d'objets de type Arrosage et Coupe (classe filles)
>> et non pas de type Entretien (classe mère).
>>
>> Est-ce possible?
>>
>
> oui, http://djangosnippets.org/snippets/1037/
>
>
C'est la version courte pour résoudre le problème, si tu veux un truc
optimiser il faut faire appel à .values('_child_name', 'childrend_id') [1]
dans iterator du ChildQuerySet et changer le code en conséquence.
[1] c'est pas children_id mais un truc dans le genre
Hors ligne
je crois que la solution polymorphisme la plus utilisée pour django est :
https://github.com/chrisglass/django_polymorphic
Hors ligne