反向外键连接 - 来自两个表的 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...
我一直在寻找这个问题的答案,但一直没有找到。希望 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...