Python 在Django中,如何设置一个具有另一个模型的多个实例的字段的模型?
我刚开始写Django模型。我想要一个个人模型,每个人都有不同数量的工作岗位Python 在Django中,如何设置一个具有另一个模型的多个实例的字段的模型?,python,django,Python,Django,我刚开始写Django模型。我想要一个个人模型,每个人都有不同数量的工作岗位 from django.db import models class Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) positions = models.ForeignKey('Position') class Pos
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
positions = models.ForeignKey('Position')
class Position(models.Model):
person = models.ForeignKey(Person)
company = models.CharField(max_length=200)
summary = models.TextField()
start_date = models.DateField()
end_date = models.DateField()
currently_there = models.BooleanField()
如何设置一个人可以拥有多个职位?您拥有的是正确的(您有一个人拥有多个职位)
我最初认为
ManyToManyField
,但我发现如果职位是个人独有的,那么这确实是一种一对多的关系。在你的职位类别末尾添加:
person = models.ForeignKey(Person)
基本上这是一种一对多的关系(一个人可能有很多职位)。您必须重建数据库(使用南迁移,因为syncdb无法从头开始重新创建),以创建foreignkey约束。您已经解决了它
反向许多关系都返回一个QuerySet,因此使用它查询数据库的方法与获取相关行的方法相同
即
默认情况下,反向集合名为modelname\u set
,如果您想要更友好的名称,可以将相关的名称添加到字段中
class Position(models.Model):
person = models.ForeignKey(Person, related_name="positions")
...
positions = some_person.positions.all()
正如一些人所说,你是对的。使用外键时,声明外键的模型与另一个模型具有一对多关系。在您的情况下,人员
与职位
有一对多关系,这意味着人员
可以有多个职位
,但职位
只能有一个人员
您可以使用访问个人的职位
要访问每个人员的位置
,只需执行以下操作
harry = Person.objects.get(first_name="Harry", last_name="Potter")
harry.position_set.all()
为人员创建职位
harry.position_set.create(company="Hogwarts", summary="Student", ... )
etc...
我是不是亲自把外键拿出来,那是指位置?而且,如果我在看一个特定的人,我能看到他们所有的位置吗?是的,这个人不应该有一个FK到位置。职位应该是一对一的。使用管理员内联查看它们。使用person.position\u set.all()通过ORM访问反向FK。阅读文档/玩得开心。非常感谢。感激
harry.position_set.create(company="Hogwarts", summary="Student", ... )
etc...