Vous n'êtes pas identifié(e).
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
> 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
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