Vous n'êtes pas identifié(e).
Bonjour tout le monde,
J'ai dans mon code des constantes comme celles-ci :
PS_CHOICES = (
(']90 - 100]', ']90 - 100]'),
(']70 - 90]', ']70 - 90]'),
(']50 - 70]', ']50 - 70]'),
(']30 - 50]', ']30 - 50]'),
(']10 - 20]', ']10 - 20]'),
('[0 - 10]', '[0 - 10]'),
)
Je devrais supprimer ces constantes du code et créer une table dans ma bd sqlite.
Le but serait de pouvoir ajouter, modifier ou supprimer des constantes via admin de django.
Je ne sais pas trop par où commencer, sauriez-vous me mettre sur la piste svp ?
Voici le code de mon modèle :
class Symptoms(Event):
"""
Clinical informations to be integrated to the very first anapath number of a given patient.
"""
symptom_type = models.ForeignKey(SymptomType)
duration = models.CharField('Duration', max_length=4, choices=DURATION_CHOICES, null=True, blank=True)
PS_CHOICES = (
(']90 - 100]', ']90 - 100]'),
(']70 - 90]', ']70 - 90]'),
(']50 - 70]', ']50 - 70]'),
(']30 - 50]', ']30 - 50]'),
(']10 - 20]', ']10 - 20]'),
('[0 - 10]', '[0 - 10]'),
)
ps = models.CharField('Karnofsky', max_length=12, choices=PS_CHOICES,
null=True, blank=True)
class Meta:
verbose_name = "Symptom"
verbose_name_plural = "Symptoms"
def __unicode__(self):
if(self.date):
return "Symptoms : %s" %(self.date)
else:
return "Symptoms : %s/%s" %(self.before, self.after)
Merci d'avance pour votre aide.
Hors ligne
Salut,
C'est assez simple, tu crée un modèle de données supplémentaire réservé à tes
constantes de choix. Par exemple :
class Duration(models.Model):
"""
Template de mail
"""
created = models.DateTimeField(u'date de création', auto_now_add=True)
label = models.CharField(u'label', max_length=4, blank=False)
value = models.CharField(u'valeur', max_length=4, blank=False)
def __unicode__(self):
return self.label
class Meta:
verbose_name = 'Constante de duration'
verbose_name_plural = 'Constantes de duration'
Et ensuite dans ton modèle "Symptoms", tu utilises une simple relation du type
"ForeignKey" pour ton attribut "duration" :
duration = models.ForeignKey(Duration, null=True, blank=True)
Tu accèdes ensuite à la vrai valeure séléctionnée de "duration" de la façon :
MoninstanceSymptoms.duration.value
Par contre à ton instance pour modifier ton attribut "duration" il faudra lui
passer une instance de "Duration" et non plus un simple string de ta valeur
comme tu pouvais le faire avant.
Le lundi 17 janvier 2011 19:25:48, beegees a écrit :
> Bonjour tout le monde,
>
> J'ai dans mon code des constantes comme celles-ci :
>
>
> PS_CHOICES = (
> (']90 - 100]', ']90 - 100]'),
> (']70 - 90]', ']70 - 90]'),
> (']50 - 70]', ']50 - 70]'),
> (']30 - 50]', ']30 - 50]'),
> (']10 - 20]', ']10 - 20]'),
> ('[0 - 10]', '[0 - 10]'),
> )
>
>
> Je devrais supprimer ces constantes du code et créer une table dans ma bd
> sqlite.
>
> Le but serait de pouvoir ajouter, modifier ou supprimer des constantes via
> admin de django.
>
> Je ne sais pas trop par où commencer, sauriez-vous me mettre sur la piste
> svp ?
>
> Voici le code de mon modèle :
>
>
> class Symptoms(Event):
> """
> Clinical informations to be integrated to the very first anapath
> number of a given patient.
> """
>
> symptom_type = models.ForeignKey(SymptomType)
>
> duration = models.CharField('Duration', max_length=4,
> choices=DURATION_CHOICES, null=True, blank=True)
> PS_CHOICES = (
> (']90 - 100]', ']90 - 100]'),
> (']70 - 90]', ']70 - 90]'),
> (']50 - 70]', ']50 - 70]'),
> (']30 - 50]', ']30 - 50]'),
> (']10 - 20]', ']10 - 20]'),
> ('[0 - 10]', '[0 - 10]'),
> )
> ps = models.CharField('Karnofsky', max_length=12, choices=PS_CHOICES,
> null=True, blank=True)
>
> class Meta:
> verbose_name = "Symptom"
> verbose_name_plural = "Symptoms"
>
> def __unicode__(self):
> if(self.date):
> return "Symptoms : %s" %(self.date)
> else:
> return "Symptoms : %s/%s" %(self.before, self.after)
>
>
> Merci d'avance pour votre aide.
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
Hors ligne
Salut,
Merci pour ta réponse rapide.
C'est assez simple, tu crée un modèle de données supplémentaire réservé à tes
constantes de choix.
OK
Par exemple :
class Duration(models.Model):
"""
Template de mail
"""
created = models.DateTimeField(u'date de création', auto_now_add=True)
label = models.CharField(u'label', max_length=4, blank=False)
value = models.CharField(u'valeur', max_length=4, blank=False)
Sais-tu juste me dire à quoi sert le u stp ?
def __unicode__(self):
return self.label
Sais-tu me dire à quoi sert cette fonction stp ?
class Meta:
verbose_name = 'Constante de duration'
verbose_name_plural = 'Constantes de duration'
Si tu pouvais m'exploiquer aussi ceci, ça serait sympa.
Et ensuite dans ton modèle "Symptoms", tu utilises une simple relation du type
"ForeignKey" pour ton attribut "duration" :duration = models.ForeignKey(Duration, null=True, blank=True)
Tu accèdes ensuite à la vrai valeure séléctionnée de "duration" de la façon :
MoninstanceSymptoms.duration.value
OK, merci
Par contre à ton instance pour modifier ton attribut "duration" il faudra lui
passer une instance de "Duration" et non plus un simple string de ta valeur
comme tu pouvais le faire avant.
La table intermédiaire sera alors créée dans la page admin de Django ?
Je pourrai alors modifier la table via cette page admin ?
Merci sincèrement pour ton aide et bonne soirée.
Hors ligne
Bonsoir,
Vu la représentation,
Ton type PS pourrait être comme suit:
class PS_CHOICE(models.Model):
min = models.IntegerField(max_length=6) #On recupere la valeur minimale
max = models.IntegerField(max_length=6) #On recupere la valeur maximale
def __str__(self):
return "]%d - %d]" % (self.min,self.max) #On definit l'affichage
def __unicode__(self):
return u"]%d - %d]" % (self.min,self.max) #On definit l'affichage unicode
class Meta:
ordering = ["min","max"]
Et ta classe Symptoms:
class Symptoms(Event):
"""
Clinical informations to be integrated to the very first anapath number of a given patient.
"""
symptom_type = models.ForeignKey(SymptomType)
duration = models.CharField('Duration', max_length=4, choices=DURATION_CHOICES, null=True, blank=True)
ps = models.ForeignKey(PS_CHOICE) #Le seul champ a modifier!
class Meta:
verbose_name = "Symptom"
verbose_name_plural = "Symptoms"
def __unicode__(self):
if(self.date):
return "Symptoms : %s" %(self.date)
else:
return "Symptoms : %s/%s" %(self.before, self.after)
Mais bien entendu le validator de classe PS_CHOICE devra vérifier que min<max. (Pas encore penché dessus.)
@+
Hors ligne
Bonsoir Franck,
Merci pour ta réponse
class PS_CHOICE(models.Model):
min = models.IntegerField(max_length=6) #On recupere la valeur minimale
max = models.IntegerField(max_length=6) #On recupere la valeur maximale
def __str__(self):
return "]%d - %d]" % (self.min,self.max) #On definit l'affichage
def __unicode__(self):
return u"]%d - %d]" % (self.min,self.max) #On definit l'affichage unicode
class Meta:
ordering = ["min","max"]
Ici, je crée une nouvelle table ? Le fait de créer une class dans le fichier models.py crée donc des tables ?
Pourquoi devons-nous mettre deux modes d'affichage (unicode et str ?)
Et ta classe Symptoms:
duration = models.CharField('Duration', max_length=4, choices=DURATION_CHOICES, null=True, blank=True)
Tu crois que je dois garder cette ligne de code ?
Sais-tu m'expliquer ceci stp ? :
class Meta:
verbose_name = "Symptom"
verbose_name_plural = "Symptoms"
Après cela, je pourrai alors modifier les données via la page admin de Django ?
Merci à toi et bonne soirée.
Hors ligne
Re,
oups, non synchro.
1) -
Sais-tu juste me dire à quoi sert le u stp ?
Le "u" c'est pour dire que l'on veut une chaine au format "unicode".
2) -
Sais-tu me dire à quoi sert cette fonction stp ?
La méthode "__unicode__" sert à la représentation d'objets au format "unicode". Un peu comme la méthode "__str__" pour le chaine brutes.
3) -
Si tu pouvais m'exploiquer aussi ceci, ça serait sympa.
verbose_name et verbose_name_plural sont les noms que django affiche pour les objets dans l' admin du site. verbose_name==nom singulier, verbose_name_plural == nom pluriel. (Par défaut, verbose_name_plural = verbose_name + "s"
4) -
La table intermédiaire sera alors créée dans la page admin de Django ?
Je pourrai alors modifier la table via cette page admin ?
Pour pouvoir gérer une classe dans le l'admin du site il te faut ajouter un bout de code du genre
from django.contrib import admin
from mon_appli.models import maclasse
admin.autodiscover()
admin.site.register(maclasse)
Dans le fichier principal d'urls de ton projet.
A plus.
[ps]
- Au fait j'ai oublié de te signaler que pour créer la nouvelle table dans la base de données il faut exécuter
manage.py syncdb
Cette commande créée les tables correspondantes pour chaque modèle n'existant pas encore dans la base de donnée.
Dernière modification par afranck64 (17-01-2011 20:56:34)
Hors ligne
Re,
Un super grand merci Franck pour ta réponse.
Grâce à cette réponse, c'est largement plus clair mais j'aurai encore des questions dans le futur :aie:
Un grand merci pour ton aide.
Hors ligne
De rien :mrgreen:
Hors ligne