反向外键连接 - 从两个表中选择

时间:2015-01-07 23:19:45

标签: django django-models

我一直在寻找这个问题的答案,但还没有找到答案。希望s / o可以帮助我。

我有两种模式:

class UsedEverywhere(models.Model):
    fk_OtherThing = models.ForeignKey(OtherThing)
    ...(many more fks)

class NewThing(models.Model):
    fk_UsedEverywhere(UsedEverywhere)
    newThingMember = models.IntegerField()

我只想加入这两张桌子。如果我能做一些像

这样的事情,那将是非常容易的
x = NewThing.objects.get()
x.fk_UsedEverwhere.fk_OtherThing ...

问题是,UsedEverywhere模型已经在我的代码库中的许多地方使用过,如果我想把'NewThing'作为UsedEverywhere的'parent',我将不得不更新很多代码所以现有的代码类似于:

x = x.filter(fk_OtherThing=val)

必须改为

x = x.filter(fk_UsedEverywhere.fk_OtherThing=val)

我试图避免这种情况。我的SQL关系都是按照我想要的方式设置的,我不想给UsedEverywhere一个NewThing列。

我想做类似的事情:

x = UsedEverywhere.objects.join(NewThing.fk_UsedEverywhere)
member = x.newThingMember

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:

使用OneToOneField而非外键字段https://docs.djangoproject.com/en/1.4/topics/db/examples/one_to_one/

正如您在他们的示例中所看到的,您可以执行类似

的操作
x = UsedEverywhere.objects.get(pk=1)
x.NewThing...
相关问题