2012-03-16 173 views
7

IM有两种模式一种是companyusers,另一个是资格 和一个用户有诸多限制条件
现在我需要进入资格,同时创造了管理员用户怎么做呢?Django的一对多关系

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

代码如下..

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) 

这里是公司的用户资料..

{ “用户名”: “史蒂夫”, “位置”: “高级工程师”, “DATE_OF_BIRTH” : “1986年5月14日”}

{ “资格”: “中学”, “max_marks”: “1000”, “marks_obtained”: “850”, “qualifying_year”: “1990”}

{“qua l“:”本科生“,”max_marks“:”750“,”marks_obtained“:”680“,”qualifying_year“:”1992“}

{”qualification“:”postgraduation“,”max_marks“:”1500 “,”marks_obtained“:”1280“,”qualifying_year“:”1997“}

+0

资质是否应该与一个用户完全相关?或者几个用户可以拥有相同的资格?在后面的例子中,ManyToManyField恰到好处,因为公司用户拥有许多资格,许多公司用户可以拥有一个资格。 – j0ker 2012-03-16 09:14:31

+0

@jOker ---由于资质包含用户获得的分数/得分,因此它应该与**只有一个**用户相关,并且不同用户的资格不同。说user1有2个资格,那么user2可以有2个或2个以上的资格。 – Dharani 2012-03-16 10:57:28

回答

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指定资格的关系,但你必须从资格CompanyUser一个ForeignKey关系(即每个资格属于一个用户,但多个资格可以属于同一个用户)。 Django自动维护CompanyUser与Qualification的后向关系,这是您正在寻找的One-To-Many关系。通过ForeignKey的选项related_name,您可以为后向关系指定一个有意义的名称(在本例中为“限定”)。您现在可以简单地访问属性为user.qualifications的CompanyUser对象的资格。

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

请务必阅读关于Model relationships的Django文档部分的内容。

+0

@joker谢谢你的回答是有帮助的,但我有上述解决方案的另一个问题。创建CompanyUser后,我需要为该用户创建资格。但我需要在创建公司用户时创建资格。我怎样才能做到这一点。 – Dharani 2012-03-19 06:31:19

+0

您显然必须首先创建CompanyUser,因为资格依赖其ID作为ForeignKey。因此,保存资质时用户必须已经在数据库中。在管理员的一个步骤中没有内置的方法来执行这两个操作。但是,如果您自己编写应用程序,则可以创建一个表单以输入公司用户的数据以及其资格,将数据发送到服务器并使用视图功能在此之后保存用户及其资格。 – j0ker 2012-03-19 15:55:32

+0

@ j0ker--谢谢,这真的很有帮助。我在想是否有任何内置功能。 – Dharani 2012-03-20 08:06:30