Django-fr

Forum

#1 02-01-2011 12:09:20

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

Je ne comprends pas la partie de ce code

Bonjour tout le monde,

J'ai un gros souci de compréhension.

Je récupère un enregistrement dans ma bd Django :

pat = Patient.objects.get(dmu_number = dmu)

J'obtiens par exemple :

[Patient: Patrick Sebastien - Num : 123456]

J'appelle ensuite une méthode :

form = completePatientForm(pat)

Voici le code de cette méthode :

def completePatientForm(pat=None, num=None, req= None):
    """
        return a python list with every form related to the patient information
        Arguments:
        pat : Patient models
        num: string with the number if the patient is not in the database
        req : the request.POST of completePatientForm
    """
    form = []
    instancenoa = instanceoa = instanceca = instancefa = None
    print "ici"
    print pat
   
    if pat:
        if (len(pat.nononcoanteriority_set.all())>0):
            instancenoa=pat.nononcoanteriority_set.all()[0] #on recupere le premier element avec [0]
        if (len(pat.oncoanteriority_set.all())>0):
            instanceoa=pat.oncoanteriority_set.all()[0]
        if (len(pat.cerebralanteriority_set.all())>0):
            instanceca=pat.cerebralanteriority_set.all()[0]
        if (len(pat.familialanteriority_set.all())>0):
            instancefa=pat.familialanteriority_set.all()[0]

Ce que je ne comprends pas, c'est cette partie de code :

if (len(pat.nononcoanteriority_set.all())>0):
            instancenoa=pat.nononcoanteriority_set.all()[0] #on recupere le premier element avec [0]
        if (len(pat.oncoanteriority_set.all())>0):
            instanceoa=pat.oncoanteriority_set.all()[0]
        if (len(pat.cerebralanteriority_set.all())>0):
            instanceca=pat.cerebralanteriority_set.all()[0]
        if (len(pat.familialanteriority_set.all())>0):
            instancefa=pat.familialanteriority_set.all()[0]

J'ai l'impression qui sélectionne des enregistrements dans la bd, est-ce que je me trompe ?

Je ne vois pas oncoanteriority_set dans la BD (via le schéma que j'ai).

Autre chose, est-il possible d'afficher tous les champs d'une based de données Django via le shell Python ou autre ?

Merci d'avance pour l'aide et bon dimanche.

beegees

Hors ligne

#2 02-01-2011 13:05:56

Jean Boussier
Membre
Inscription : 11-09-2010
Messages : 13

Re : Je ne comprends pas la partie de ce code

> J'ai l'impression qui sélectionne des enregistrements dans la bd, est-ce
> que je me trompe ?
Oui en général quand tu voit .all() ça se traduit par une requête SELECT.

> Je ne vois pas oncoanteriority_set dans la BD (via le schéma que j'ai).
Quand un champ finit par "_set" c'est le nom par défault d'une relation inverse.
Ce qui veut dire que le modèle "oncoanteriority" a un champ ForeignKey vers ton modèle patient.

> Autre chose, est-il possible d'afficher tous les champs d'une based de
> données Django via le shell Python ou autre ?
Pour être utilisé par ton application tes champs doivent être déclarés dans leurs modèles respectifs, donc si tu veut connaitre ton schéma ouvre tes modèles.
Si vraiment tu est perdu tu peut utiliser modeviz http://code.djangoproject.com/wiki/DjangoGraphviz


Bon par contre, je sais pas d'ou tu tire ce bout de code, mais si tu lit ce projet pour apprendre Django change tout de suite car les 10 lignes que tu as posté suffisent à montrer que ce projet à été codé avec des moufles.
Si tu apprend Django car tu a décroché un stage ou un job sur ce projet, eh bien je suis navré pour toi.

Hors ligne

#3 02-01-2011 13:21:24

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

Re : Je ne comprends pas la partie de ce code

Bonjour Jean,

Merci pour ta réponse.

Oui en général quand tu voit .all() ça se traduit par une requête SELECT.

Merci, c'est bon à savoir.

Quand un champ finit par "_set" c'est le nom par défault d'une relation inverse.

OK, merci

Ce qui veut dire que le modèle "oncoanteriority" a un champ ForeignKey vers ton modèle patient.

Voici le code de mon modèle :

class OncoAnteriority(BaseAnteriority):
    """
    Oncological anteriorities that are not related to glial tumors go here.
    """
    cancer_type = models.ForeignKey(CancerType, null=True, blank=True)
    surgery = models.CharField('Surgery', max_length=1, choices=YES_NO_CHOICES, blank=True, null=True)
    radiotherapy = models.CharField('Radiotherapy', max_length=1, choices=YES_NO_CHOICES, blank=True, null=True)
    chemotherapy = models.CharField('Chemotherapy', max_length=1, choices=YES_NO_CHOICES, blank=True, null=True)

    def __unicode__(self):
        return u'%s' % ('Oncological Anteriority #'+ str(self.id),)

    class Meta:
        verbose_name_plural = 'Oncological Anteriorities'

Je ne vois pas de clé vers Patient

Pour être utilisé par ton application tes champs doivent être déclarés dans leurs modèles respectifs, donc si tu veut connaitre ton schéma ouvre tes modèles.

Logique

Si vraiment tu est perdu tu peut utiliser modeviz http://code.djangoproject.com/wiki/DjangoGraphviz

Merci pour l'info

Je te remercie encore pour ton aide et je te souhaite un bon dimanche.

beegees

Dernière modification par beegees (02-01-2011 14:11:00)

Hors ligne

Pied de page des forums