我一直在寻找这个问题的答案,但还没有找到答案。希望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
答案 0 :(得分:0)
我找到了解决方案:
使用OneToOneField而非外键字段https://docs.djangoproject.com/en/1.4/topics/db/examples/one_to_one/
正如您在他们的示例中所看到的,您可以执行类似
的操作x = UsedEverywhere.objects.get(pk=1)
x.NewThing...