2012-03-16 171 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