Django-fr

Forum

  • Accueil
  • » Django-fr
  • » Modifier et ajouter des constantes via le l'admin de Django

#1 17-01-2011 19:25:48

beegees
Membre
Inscription : 26-12-2010
Messages : 66

Modifier et ajouter des constantes via le l'admin de Django

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

#2 17-01-2011 20:01:16

David Thenon
Membre
Inscription : 11-08-2010
Messages : 156
Site Web

Re : Modifier et ajouter des constantes via le l'admin de Django

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

#3 17-01-2011 20:27:07

beegees
Membre
Inscription : 26-12-2010
Messages : 66

Re : Modifier et ajouter des constantes via le l'admin de Django

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

#4 17-01-2011 20:30:22

afranck64
Membre
Inscription : 30-12-2010
Messages : 20

Re : Modifier et ajouter des constantes via le l'admin de Django

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.)

@+ wink

Hors ligne

#5 17-01-2011 20:42:49

beegees
Membre
Inscription : 26-12-2010
Messages : 66

Re : Modifier et ajouter des constantes via le l'admin de Django

Bonsoir Franck,

Merci pour ta réponse wink

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

#6 17-01-2011 20:50:34

afranck64
Membre
Inscription : 30-12-2010
Messages : 20

Re : Modifier et ajouter des constantes via le l'admin de Django

Re,
oups, non synchro. smile

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

#7 17-01-2011 21:02:38

beegees
Membre
Inscription : 26-12-2010
Messages : 66

Re : Modifier et ajouter des constantes via le l'admin de Django

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

#8 17-01-2011 21:06:40

afranck64
Membre
Inscription : 30-12-2010
Messages : 20

Re : Modifier et ajouter des constantes via le l'admin de Django

De rien :mrgreen:

Hors ligne

  • Accueil
  • » Django-fr
  • » Modifier et ajouter des constantes via le l'admin de Django

Pied de page des forums