2011-11-05 1 views
3

j'ai ces modèles dans mon application models.py:Django: bon ordre de ces modèles

class A(models.Model): 
    #some details 
    pass 


class B(models.Model): 
    a = models.ForeignKey(A, null=True, blank=True) 
    c = models.ForeignKey(C, null=True, blank=True) 

class C(models.Model): 
    pass 

    def method(self): 
     b_list = B.objects.filter(c=self) 
     a_list = [] 
     for b in b_list: 
      a_list.append(b.a) 

     return a_list 

cela me donne une erreur quand je lance le serveur web car en B, il déclare que C est pas défini.

alors si je mets ces modèles dans l'ordre A C B django me dit que B n'est pas défini dans la méthode de C(). Comment puis-je résoudre ce problème "non défini" dans cette situation? ça semble circulaire!

Répondre

3

Vous pouvez toujours utiliser une chaîne dans de tels cas:

class A(models.Model): 
    #some details 
    pass 


class B(models.Model): 
    a = models.ForeignKey("A", null=True, blank=True) # note the quotes 
    c = models.ForeignKey("C", null=True, blank=True) # note the quotes 

class C(models.Model): 
    pass 

Si c'était un cas plus « extrême » et on ne pouvait pas utiliser cette astuce, déclarant C d'abord, puis A et B, et après que C.method (def C_method [...] C.method = C_method) aurait été la voie à suivre.

+0

merci, votre première option a résolu le problème :) – apelliciari