我有两种模式,一种是公司用户,另一种是资格
一个用户有很多资格
现在我需要在admin中创建用户时输入资格证书,我该怎么做?
我试图在用户模型中保留许多领域,但徒劳无益...
我需要为新用户创建新资格的字段中填充了与其他用户相关的资格。
代码如下。

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)
这是公司的用户详细信息。

最佳答案

您要查找的一对多关系在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对象上的Qualifications。

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

一定要在Django文档部分中阅读有关Model relationships的内容。

10-08 02:30