Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django中,如何设置一个具有另一个模型的多个实例的字段的模型?_Python_Django - Fatal编程技术网

Python 在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

我刚开始写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 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...