2011-08-21 27 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