django一对多关系

django一对多关系,django,Django,我有两个模型,一个是公司用户,另一个是资格认证 并且一个用户具有多个资格 现在我需要在管理员中创建用户时输入资格,我该怎么做 我试图在用户模型中保留多对多字段,但徒劳。。。 与其他用户相关的资格在我需要为新用户创建新资格的字段中填充 代码如下 class Qualification(models.Model): qualification = models.CharField(max_length=250) max_marks = models.IntegerField(max_

我有两个模型,一个是公司用户,另一个是资格认证 并且一个用户具有多个资格
现在我需要在管理员中创建用户时输入资格,我该怎么做

我试图在用户模型中保留多对多字段,但徒劳。。。 与其他用户相关的资格在我需要为新用户创建新资格的字段中填充

代码如下

class Qualification(models.Model):
    qualification = models.CharField(max_length=250)
    max_marks = models.IntegerField(max_length=50)
    marks_obtained = models.IntegerField(max_length=50)
    qualifying_year = models.DateField(auto_now=False, null=True)

class CompanyUser(User):
    date_of_birth = models.DateField(auto_now=False, null=True)
    position = models.CharField(max_length=100)
    qualifications = models.ManyToManyField(Qualification)
这是公司用户的详细信息

{“用户名”:“史蒂夫”,“职位”:“高级工程师”,“出生日期”:“1986-05-14”}

{“资格”:“中学”,“最高分数”:“1000”,“获得分数”:“850”,“资格年”:“1990”}

{“资格”:“本科”,“最高分数”:“750”,“获得分数”:“680”,“资格年”:“1992”}

{“资格”:“毕业后”,“最高分数”:“1500”,“获得分数”:“1280”,“资格年”:“1997”}


您正在寻找的一对多关系在Django中不存在。这是不需要的,因为您可以用另一种方式来实现:使用从资格到用户的ForeignKey关系。根据您的示例,您可以如下定义模型:

class Qualification(models.Model):
    qualification = models.CharField(max_length=250)
    max_marks = models.IntegerField(max_length=50)
    marks_obtained = models.IntegerField(max_length=50)
    qualifying_year = models.DateField(auto_now=False, null=True)
    user = models.ForeignKey('CompanyUser', related_name='qualifications')

class CompanyUser(User):
    date_of_birth = models.DateField(auto_now=False, null=True)
    position = models.CharField(max_length=100)
因此,没有指定从CompanyUser到Confication的关系,但您有一个从Confication到CompanyUser的ForeignKey关系(即,每个资格属于一个用户,但多个资格可以属于同一个用户)。Django自动维护从CompanyUser到Qualification的向后关系,这是您正在寻找的一对多关系。通过ForeignKey的
related\u name
选项,您可以为向后关系指定一个有意义的名称(在本例中为'qualifications')。现在,您只需使用属性
user.Qualifications
访问CompanyUser对象上的资格

在admin中,您首先创建一个新的CompanyUser,然后通过ForeignKey将任意数量的资格分配给该用户


请务必阅读Django文档部分中的相关内容。

资格认证是否应仅与一个用户相关?或者几个用户可以拥有相同的资格?在后一种情况下,ManyToManyField正好合适,因为一个公司用户有许多资格,一个资格可以由多个公司用户持有。@jOker--因为资格包含用户获得的分数/分数,它应该只与一个用户相关,资格的数量因用户而异。假设user1有2个资格,那么user2可以有2个或2个以上的资格。@joker谢谢你的回答,这很有帮助,但我对上述解决方案有另一个问题。创建CompanyUser后,我需要为该用户创建资格。但我需要在创建公司用户的同时创建资格。我该怎么做呢?很明显,你必须首先创建公司用户,因为资格取决于其作为外键的ID。因此,保存资格时,用户必须已经在数据库中。在管理中,没有内置的方法在一个步骤中完成这两个操作。但是,如果您自己编写应用程序,您可以创建一个表单来输入公司用户及其资格的数据,将数据发送到服务器,然后使用查看功能首先保存用户及其资格。@j0ker--谢谢,这真的很有帮助。我在想是否有任何内置功能。这是否也考虑了多个用户具有相同资格时的情况?