Django 中的关系 1 到 N
Relation 1 to N in Django
我是一名新 python 开发人员。现在我正在学习 Django,但遇到了一些麻烦。
例如在Java中,我可以有一个1对N的关系,像这样:
public class Son(){
// some things
}
public class Father(){
Son son[];
// some things
}
但是,如果我需要在 Django 中建模,我该怎么做?
我试过下面的代码,但它只提供一对一的关系:
class Father:
father = models.ForeignKey('Son')
我该怎么做?
class Son:
father = models.ForeignKey(Father)
这样任何一个儿子只能有一个父亲...但是任何一个父亲可以有多个儿子,这是一个多对一的关系
你还可以做得更好
class Son:
father_id = Column(Integer, ForeignKey('father.id'))
father = relationship("Father", backref="sons")
现在这将为父亲实例提供一个名为 sons 的引用,该引用在一个列表中有很多儿子(不知道你为什么选择 father/son 而不是 parent/child 但是嗯)
这是最好的方法(始终定义 related_name):
class Son(models.Model):
father = models.ForeignKey(Father, related_name="sons")
那么你可以这样做:
dad = Father.objects.get(id=5)
for son in dad.sons.all():
print son.name
我是一名新 python 开发人员。现在我正在学习 Django,但遇到了一些麻烦。
例如在Java中,我可以有一个1对N的关系,像这样:
public class Son(){
// some things
}
public class Father(){
Son son[];
// some things
}
但是,如果我需要在 Django 中建模,我该怎么做?
我试过下面的代码,但它只提供一对一的关系:
class Father:
father = models.ForeignKey('Son')
我该怎么做?
class Son:
father = models.ForeignKey(Father)
这样任何一个儿子只能有一个父亲...但是任何一个父亲可以有多个儿子,这是一个多对一的关系
你还可以做得更好
class Son:
father_id = Column(Integer, ForeignKey('father.id'))
father = relationship("Father", backref="sons")
现在这将为父亲实例提供一个名为 sons 的引用,该引用在一个列表中有很多儿子(不知道你为什么选择 father/son 而不是 parent/child 但是嗯)
这是最好的方法(始终定义 related_name):
class Son(models.Model):
father = models.ForeignKey(Father, related_name="sons")
那么你可以这样做:
dad = Father.objects.get(id=5)
for son in dad.sons.all():
print son.name