Джанго отношение один ко многим - PullRequest
8 голосов
/ 16 марта 2012

У меня есть две модели, одна из которых является компанией-пользователем, а другая - квалификацией и один пользователь имеет много квалификаций
Теперь мне нужно ввести квалификации при создании пользователя в админ. Как мне это сделать?

Я пытался сохранить поле "многие ко многим" в модели пользователей, но тщетно ... квалификации, связанные с другим пользователем, заполняются в полях, где мне нужно создать новую квалификацию для нового пользователя.

код следует ..

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)

вот данные пользователя компании ..

{"username": "steve", "position": "Senior Engineer", "date_of_birth": "1986-05-14"}

{"квалификация": "средняя школа", "max_marks": "1000", "marks_obtained": "850", "qualifying_year": "1990"}

{"квалификация": "бакалавриат", "max_marks": "750", "marks_obtained": "680", "qualifying_year": "1992"}

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

1 Ответ

13 голосов
/ 16 марта 2012

Отношение «один ко многим», которое вы ищете, не существует в 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 и Qualification не определено, но у вас есть отношение ForeignKey от Qualification к CompanyUser (т.е. каждая квалификация принадлежит одномупользователь, но несколько квалификаций могут принадлежать одному и тому же пользователю).Django автоматически поддерживает обратное отношение между CompanyUser и Qualification, то есть отношение «один ко многим», которое вы ищете.Опцией related_name ForeignKey вы можете указать значимое имя для обратного отношения (в данном случае «квалификации»).Теперь вы можете просто получить доступ к квалификациям объекта CompanyUser с атрибутом user.qualifications.

. В администраторе вы сначала должны создать нового CompanyUser, а затем произвольное количество квалификаций, которые вы назначаете этому пользователю через ForeignKey..

Обязательно прочитайте об этом в разделе документации Django о Связи с моделями .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...