2012-02-05 84 views
1

類似我問here的問題,如果我想列出所有從模型中的外鍵關係的,是有辦法來自動檢測這些關係(向前和向後)?編程識別Django的外鍵鏈接

具體地,如果模型1讀取

class Mdl_one(models.Model): 
    name = models.CharField(max_length=30) 

和模型2讀取

class Mdl_two(models.Model): 
    mdl_one = models.ForeignKey(Mdl_one) 
    name = models.CharField(max_length=30) 

是否有一些元指令I可以從Mdl_one運行(如Model_one()._ meta.one_to_many),它告訴我認爲mdl_two與它有一對多的外鍵關係?簡單地說就是mdl_one和mdl_two 可以連接,不一定是任何兩個物體實際上

回答

1

這是你正在尋找:

yourModel._meta.get_all_related_objects() 

樣品(編輯):

class Alumne(models.Model): 
    id_alumne = models.AutoField(primary_key=True) 
    grup = models.ForeignKey(Grup, db_column='id_grup') 
    nom_alumne = models.CharField("Nom",max_length=240) 
    cognom1alumne = models.CharField("Cognom1",max_length=240) 
    cognom2alumne = models.CharField("Cognom2",max_length=240, blank=True) 
    ... 

class Expulsio(models.Model):        <---! 
    alumne = models.ForeignKey(Alumne, db_column='id_alumne') 
    dia_expulsio = models.DateField(blank=True) 
    ... 


>>> from alumnes.models import Alumne as A 
>>> for x in A._meta.get_all_related_objects(): 
...  print x.name 
... 
horaris:alumneexclosdelhorari 
presencia:controlassitencia 
incidencies:entrevista 
incidencies:expulsio          <---! 
incidencies:incidencia 
incidencies:incidenciadaula 
seguimentTutorial:seguimenttutorial 
+0

這不正是我要找的。我相信這會列出所有實際相關的對象。所以,如果存在着mdl_two的對象鏈接到mdl_one一個對象,它會告訴我在mdl_two該對象的型號名稱。但我想要更一般的東西。我想知道mdl_two可以連接到mdl_one。因此,獨立於實際的對象(或兩個物體之間甚至一個實際的鏈接),我只是想列出,可以有一個相關的mdl_two對象mdl_one。我希望用戶知道這種關係可以定義,而不是它一定定義。 – 2012-02-05 17:56:32

+0

所以在這個例子(和糾正我,如果我錯了),如果沒有對某些對象mdl_one實際相關對象mdl_two,mdl_two不會上市? – 2012-02-05 17:58:20

+0

@Ed。 ,我編輯過樣本。看看你是否需要這個。如果不是,我會刪除答案(或者如果可以的話,改進它) – danihp 2012-02-05 18:16:56