Vous n'êtes pas identifié(e).
Bonjour,
j'ai 2 modèles, Periode et Utilisateur. Dans Utilisateur, j'aimerai pouvoir récupérer dans la fonction Personne.finValidite les Periodes qui sont actuellement valides.
Je ne sais pas trop comment m'y prendre, quelqu'un peu m'aider svp ?
Voilà les bouts de models :
class Periode(models.Model):
"""
Dates de début et durée en mois
"""
nom = models.CharField(max_length=50, verbose_name="nom")
dateDebut = models.DateField(verbose_name="date de début", default=datetime.now())
duree = models.IntegerField(max_length=10, verbose_name="durée en mois",
default=12,
validators=[
MaxValueValidator(12*10),
MinValueValidator(1)
])
def dateFin(self):
return (self.dateDebut + relativedelta(months=self.duree)).strftime("%d-%m-%y")
def __unicode__(self):
return u"%s [du %s au %s] (%s mois)" % (self.nom, self.dateDebut.strftime("%d-%m-%y"), self.dateFin() , self.duree)
class Utilisateur(models.Model):
personne = models.OneToOneField(Personne, verbose_name="personne")
user = models.OneToOneField(User, verbose_name="compte Utilisateur")
dateEnregistrement = models.DateField(auto_now_add=True, verbose_name="date de l'enregistrement")
periodes = models.ManyToManyField(Periode, verbose_name="périodes d'inscription")
def finValidite(self):
p = self.periodes
print p
Merci
Dernière modification par vache67 (22-07-2014 11:32:22)
Hors ligne
J'ai un peu avancé depuis... mais je rencontre un autre problème...
Est il possible de faire appel à des property depuis un xxx.objects.filter ??
Hors ligne
Pour pouvoir t'aider, il nous faut le problème, plutôt que la solution que tu essaies d'implémenter.
Hors ligne
ok,
j'ai ça :
class Periode(models.Model):
"""
Dates de début et durée
"""
nom = models.CharField(max_length=50, verbose_name="nom")
dateDebut = models.DateField(verbose_name="date de début", default=datetime.now())
duree = models.IntegerField(max_length=10, verbose_name="durée en mois",
default=12,
validators=[
MaxValueValidator(12*10),
MinValueValidator(1)
])
def _dateFin(self):
return self.dateDebut + relativedelta(months=self.duree)
dateFin = property(_dateFin)
def _estValideActuellement(self):
return self.dateDebut <= datetime.now().date() <= self.dateFin
estValideActuellement = property(_estValideActuellement)
.......
class Utilisateur(models.Model):
personne = models.OneToOneField(Personne, verbose_name="personne")
user = models.OneToOneField(User, verbose_name="compte Utilisateur")
dateEnregistrement = models.DateField(auto_now_add=True, verbose_name="date de l'enregistrement")
periodes = models.ManyToManyField(Periode, verbose_name="périodes d'inscription")
def _estValide(self):
p = Periode.objects.filter(estValideActuellement=True) <--- problème ici
p = Periode.objects.filter(estValideActuellement=True) ne fonctionne pas... il me dit qu'il est possible de faire un filter que nom , dateDebut et duree
Ya t'il sinon, a part en faisant des boucles partout, moyen de savoir ici, dans Utilisateur, si au moins une des périodes attribuées sont actuellement valides
Pourtant j'ai ajouté la propriété dateFin.....
Dernière modification par vache67 (24-07-2014 18:48:51)
Hors ligne
C'est normal que cela ne fonctionne pas. Le filter construit une requête en SQL alors que la propriété est coté Python.
Hors ligne
Ha ben oui, j'avais remarqué que ça fonctionne pas...
Ca valait le coup de me faire poser ma question autrement pour pas y répondre...
Dernière modification par vache67 (28-07-2014 19:13:48)
Hors ligne
Vache67 Peut être regarder du côté des models manager?
https://docs.djangoproject.com/en/1.6/t … /#managers
Hors ligne
C'est assez intéressant, ça permettrait effectivement d'implanter la fonctionnalité que je cherche. Mais il faudrait que j'écrive tout aussi. (ce que j'ai fait autrement maintenant). . C'est bizarre qu'il n'y ait rien de déjà fait pour ça.
Hors ligne