Django - 如何通过中介链接到遗留数据库?

时间:2011-08-21 04:56:39

标签: mysql django django-models

我必须将遗留设计与我的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 个答案:

答案 0 :(得分: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无论如何都会自动执行多个字段,只要你想添加额外的字段,就可以这样做了。