2012-03-16 4 views
7

메신저는 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 "자격": "1992"}

{ "자격": "postgraduation", "max_marks": "1500", "max_marks" ","marks_obtained ":"1280 ","qualifying_year ":"1997 "}

+0

자격이 정확히 한 명의 사용자에게 관련되어야합니까? 또는 여러 사용자가 동일한 자격을 취득 할 수 있습니까? 이후의 경우 ManyToManyField는 옳습니다. CompanyUser는 많은 자격을 보유하고 있으며 하나의 자격은 많은 CompanyUsers가 보유 할 수 있기 때문에 적합합니다. – j0ker

+0

@jOker --- 자격은 사용자가 획득 한 점수/점수를 포함하므로 ** 정확히 한 명의 ** 사용자와 관련이 있어야하며, 자격의 번호는 사용자마다 다릅니다. user1이 2 개의 자격을 보유하고 있다고 가정 할 때 user2는 2 개 또는 2 개 이상의 자격을 가질 수 있습니다. – Dharani

답변

13

찾고있는 일대 다 관계가 장고에 없습니다. 당신이 다른 방향으로 그것을 할 수 있기 때문에 그것은 필요하지 않습니다 : 자격에서 사용자에게 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에 자격에서 외래 키 관계를 가지고, 여러 자격은 같은 사용자에게 속할 수 있습니다). Django는 CompanyUser에서 찾고있는 일대 다 관계 인 자격으로 자동으로 후위 관계를 유지합니다. ForeignKey의 옵션 related_name을 사용하면 역방향 관계 (이 경우 '자격')에 의미있는 이름을 지정할 수 있습니다. 이제 user.qualifications 속성을 사용하여 CompanyUser 개체의 자격에 액세스 할 수 있습니다.

관리자는 먼저 새로운 CompanyUser를 만든 다음 ForeignKey를 통해이 사용자에게 할당하는 임의의 수의 자격을 만듭니다.

Django 문서 섹션의 내용은 Model relationships입니다.

+0

@joker 도움에 대한 답변 주셔서 감사합니다,하지만 위의 솔루션에 다른 문제가 있습니다. CompanyUser를 만든 후 그 사용자에 대한 자격을 만들어야합니다. 하지만 회사 사용자를 만드는 동안 자격을 만들어야합니다. 내가 어떻게 할 수 있지. – Dharani

+0

자격은 ID로 ForeignKey로 의존하기 때문에 CompanyUser를 먼저 만들어야합니다.따라서 자격이 저장 될 때 사용자는 이미 데이터베이스에 있어야합니다. 관리자의 한 단계에서 두 가지 작업을 수행 할 수있는 기본 제공 방법이 없습니다. 그러나 앱을 직접 작성하는 경우 CompanyUser 및 자격에 대한 데이터를 입력하고 서버에 데이터를 보내고 뷰 기능을 사용하여 사용자를 먼저 저장하고 자격을 저장하는 양식을 만들 수 있습니다 . – j0ker

+0

@ j0ker-- 덕분에 정말 도움이되었습니다. 내장 된 기능이 있는지 생각하고있었습니다. – Dharani