2012-03-16 29 views
7

imは2つのモデルを持つ1つは企業ユーザーであり、もう1つは資格 であり、1人のユーザーは多くの資格を持っています
これで管理者にユーザーを作成する際に資格を入力する必要があります。django 1対多の関係

私は多くのフィールドをユーザーモデルに保持しようとしましたが、無駄です... 他のユーザーに関連する資格は、新しいユーザーの資格を作成する必要があるフィールドに入力されています。コードは以下の

..ここ

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 "max_marks": "750"、 "marks_obtained": "680"、 "qualifying_year": "1992"}

{"資格": "postgraduation"、 "max_marks": "1500" "、" marks_obtained ":" 1280 "、" qualifying_year ":" 1997 "}

+0

資格は正確に1人のユーザーに関連する必要がありますか?または、複数のユーザーが同じ資格を持つことができますか?後者の場合、CompanyUserは多くの資格を持ち、1つの資格は多くのCompanyUsersによって保持されることができるので、ManyToManyFieldは正しくあります。 – j0ker

+0

@jOker ---資格にはユーザーによって得られたマーク/スコアが含まれているため、**正確に1人**のユーザーに関連する必要があり、資格の数はユーザーによって異なります。 user1が2つの資格を持っていれば、user2は2つ以上の資格を持つことができます。 – Dharani

答えて

13

あなたが探している1対多数の関係は、Djangoには存在しません。あなたはそれをもう一度行うことができるので、必要ではありません:資格からユーザーへのForeignKey関係。あなたの例によると、次のようにモデルを定義します(つまり、それぞれの資格があるユーザーに属しているので、資格しCompanyUserから指定は関係がありません

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への資格からForeignKeyの関係を持っています、複数の資格は同じユーザーに属することができます)。 DjangoはCompanyUserからQualificationへの後方関係を自動的に維持します。これはあなたが探しているOne-To-Many関係です。 ForeignKeyのオプションrelated_nameによって、後方関係(この場合は '資格')に意味のある名前を指定することができます。属性がuser.qualificationsのCompanyUserオブジェクトの資格に簡単にアクセスできるようになりました。

管理者はまず、新しいCompanyUserを作成してから、ForeignKeyを使用してこのユーザーに割り当てた任意の数の資格を作成します。

DjangoのドキュメントセクションのModel relationshipsについては、そのことについてお読みください。

+0

@jokerは答えに感謝してくれました。しかし、私は上記の解決策に別の問題があります。 CompanyUserを作成した後、そのユーザーの資格を作成する必要があります。しかし、私は会社のユーザーを作成しながら資格を作成する必要があります。どうやってやるの。 – Dharani

+0

資格はそのIDをForeignKeyとして使用しているので、まずCompanyUserを作成する必要があります。したがって、資格が保存されると、ユーザーはすでにデータベースに入っている必要があります。管理者は、両方の操作を1つの手順で実行する組み込みの方法はありません。ただし、自分でアプリを作成する場合は、CompanyUserのデータとその資格を入力するフォームを作成し、そのデータをサーバーに送信し、ビュー機能を使用して最初にユーザーとその資格を保存することができます。 – j0ker

+0

@ j0ker--本当に助けてくれてありがとう。私は組み込みの機能があるかどうかを考えていました。 – Dharani