2011-08-21 59 views
1

我必須將遺留設計與我的Django項目集成,我正在尋找一些關於使用中介的建議。現有的設計工作,但現在我需要通過第三個表格過濾項目。Django - 如何通過中介鏈接到遺留數據庫?

英語 - 我有一個組織(Django),並指向許多項目(遺產)。但是,所有的項目都沒有提及該組織。我有第三個表格ProjectMap,它是通過觸發器構建的,以解決這個問題。它將Organization.name對應到一個項目。

我該如何將這些粘在一起才能讓我做到這一點。

projects = Organization.objects.get(pk=1).projects.all() 

它不會得到所有的項目只是在第三個表中匹配的項目。以下是我迄今爲止..

通過,如果任何人有一個更好的策略的方式,我所有的耳朵

class Organization(models.Model): 
    name = models.CharField(max_length=32) 
    projects = models.ManyToManyField(Project) 

class Project(models.Model): 
    """This is the project info page.. 

    Note: 'id' does exist and is the pk. 
    """ 
    result_number = models.IntegerField(null=True, db_column='LBLDGRUNNO', blank=True) 
    building_number = models.IntegerField(db_column='LBLDGNO') 
    name = models.CharField(max_length=150, db_column='SPIBLGNAME', blank=True) 

    class Meta: 
     db_table = u'PROJINFO' 
     managed = False 

class ProjectMap(models.Model): 
    projinfo_table_id = models.IntegerField(null=True) # 'id' of Project 
    name = models.CharField(max_length=128, null=True) # 'name' in Organization 

非常感謝!

回答

1

不知道這是什麼你問,但你可以使用在ManyToManyField的through調用來定義一箇中間表:反正

class Organization(models.Model): 
    name = models.CharField(max_length=32) 
    projects = models.ManyToManyField(Project, through="ProjectOrganisation") 

class Project(models.Model): 
    #Stuff Here 

class ProjectOrganisation(models.Model): 
    project = models.ForeignKey(Project) 
    organization = models.ForeignKey(Organization) 
    #Other Fields Here 

的Django與多對多域自動執行此操作,只是如果你想添加額外的字段,這是做到這一點的方法。

+0

這將是更容易,但不可能給定的限制,因爲觸發器是創建Map表,它不會爲我工作。一廂情願的想法,但謝謝! – rh0dium

+0

經過大量的返工(包括潛入MySQL觸發器 - 哦,男孩..)這是我最終走向的方向。謝謝! – rh0dium

相關問題