2012-03-16 18 views
7

im posiadanie dwóch modeli jeden jest companyusers, a drugi to kwalifikacja i jeden użytkownik ma wiele kwalifikacji
teraz muszę wprowadzić kwalifikacje podczas tworzenia użytkownika w admin, jak to zrobić?django jeden do wielu relacji

Próbowałem zachować wiele do wielu dziedzin w modelu użytkowników, ale na próżno ... kwalifikacje, które są związane z innym użytkownikiem, są wypełniane w polach, w których muszę utworzyć nowe kwalifikacje dla nowego użytkownika.

następujący kod ..

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) 

tutaj jest dane użytkowników firma ..

{ "nazwa użytkownika": "Steve", "pozycja": "Inżynier", "date_of_birth" : "14.05.1986"}

{ "kwalifikacje": "średnie", "max_marks": "1000", "marks_obtained": "850", "qualifying_year": "1990"}

{"qua Lification ":" undergraduation "," max_marks ":" 750 "," marks_obtained ":" 680 "," qualifying_year ":" 1992 "}

{" kwalifikacja ":" studia podyplomowe "," max_marks ":" 1500 ”, "marks_obtained": "1280", "qualifying_year": "1997"}

+0

Czy kwalifikacja powinna być powiązana z dokładnie jednym użytkownikiem? Czy kilku użytkowników może mieć te same kwalifikacje? W późniejszym przypadku ManyToManyField ma rację, ponieważ Przedsiębiorca posiada wiele kwalifikacji, a wielu Firmware może posiadać jedną kwalifikację. – j0ker

+0

@jOker --- ponieważ kwalifikacja zawiera oceny/punkty uzyskane przez użytkownika, powinna być związana z ** dokładnie jednym ** użytkownikiem, a liczba kwalifikacji różni się w zależności od użytkownika. twierdzą, że użytkownik 1 ma 2 kwalifikacje, a użytkownik 2 może mieć 2 lub więcej niż 2 kwalifikacje. – Dharani

Odpowiedz

13

relacja jeden-do-wielu szukasz nie istnieje w Django. Nie jest to konieczne, ponieważ można to zrobić odwrotnie: z relacją ForeignKey z kwalifikacji do użytkownika. Według swoim przykładzie, że można zdefiniować modele w następujący sposób:

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) 

Tak więc, nie ma związku określony od CompanyUser do kwalifikacja ale masz relację ForeignKey od kwalifikacji do CompanyUser (czyli każda kwalifikacja należy do jednego użytkownika, ale wiele kwalifikacji może należeć do tego samego użytkownika). Django automatycznie utrzymuje relację wstecz od CompanyUser do Qualification, czyli relacji One-To-Many, której szukasz. Opcją related_name obiektu ForeignKey można podać znaczącą nazwę relacji wstecz (w tym przypadku "kwalifikacje"). Teraz możesz po prostu uzyskać dostęp do Kwalifikacji w obiekcie CompanyUser z atrybutem user.qualifications.

W administratorze należy najpierw utworzyć nowego użytkownika CompanyUser, a następnie dowolną liczbę kwalifikacji przypisanych temu użytkownikowi za pomocą klucza ForeignKey.

Przeczytaj informacje na ten temat w sekcji Dokumenty Django na temat Model relationships.

+0

@joker dzięki za odpowiedź, to było pomocne, ale mam inny problem z powyższym rozwiązaniem. po utworzeniu CompanyUser muszę utworzyć kwalifikacje dla tego użytkownika. ale muszę tworzyć kwalifikacje podczas tworzenia użytkownika firmy. jak mogę to zrobić. – Dharani

+0

Oczywiście musisz najpierw utworzyć CompanyUser, ponieważ Kwalifikacje polegają na jego ID jako ForeignKey.Tak więc użytkownik musi być już w bazie danych po zapisaniu kwalifikacji. Nie ma wbudowanego sposobu wykonywania obu czynności w jednym kroku w administratorze. Jeśli jednak piszesz aplikację samodzielnie, możesz utworzyć formularz do wprowadzania danych dla CompanyUser, a także jego kwalifikacji, przesłać dane do serwera i użyć funkcji widoku, aby najpierw zapisać użytkownika, a następnie jego kwalifikacje. . – j0ker

+0

@ j0ker-- dzięki, że było naprawdę pomocne. zastanawiałem się, czy istnieje wbudowana funkcjonalność. – Dharani

Powiązane problemy