反向外键连接 - 来自两个表的 select

reverse foreign key join - select from two tables

我一直在寻找这个问题的答案,但一直没有找到。希望 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

我找到了解决方案:

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

正如您在他们的示例中看到的那样,您可以执行以下操作

x = UsedEverywhere.objects.get(pk=1)
x.NewThing...