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--谢谢,这真的很有帮助。我在想是否有任何内置功能。这是否也考虑了多个用户具有相同资格时的情况?