我试图在用户模型中保留多个字段,但徒劳无功...... 与其他用户相关的资格填充在我需要为新用户创建新资格的字段中。
代码如下......
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)
这是公司用户详细信息..
{“username”:“steve”,“position”:“高级工程师”,“date_of_birth”:“1986-05-14”}
{“qualified”:“中学”,“max_marks”:“1000”,“marks_obtained”:“850”,“qualifying_year”:“1990”}
{“qualified”:“undergraduation”,“max_marks”:“750”,“marks_obtained”:“680”,“qualifying_year”:“1992”}
{“qualified”:“postgraduation”,“max_marks”:“1500”,“marks_obtained”:“1280”,“qualifying_year”:“1997”}
答案 0 :(得分:13)
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到Qualification没有指定任何关系,但您有从Qualification到CompanyUser的ForeignKey关系(即每个资格属于一个用户,但多个资格可以属于同一个用户)。 Django自动维护从CompanyUser到Qualification的向后关系,这是您正在寻找的一对多关系。通过ForeignKey的选项related_name
,您可以为向后关系指定有意义的名称(在本例中为'qualifications')。您现在可以使用属性user.qualifications
简单地访问CompanyUser对象上的资格。
在管理员中,您首先要创建一个新的CompanyUser,然后创建通过ForeignKey分配给该用户的任意数量的资格。
请务必阅读Django文档部分中关于Model relationships的内容。