Джанго - Как создать отношение один к одному - PullRequest
0 голосов
/ 05 ноября 2019

В моем приложении есть отношение многие-к-одному, например, один учитель может преподавать более одного предмета. Так что в админке я не могу это смоделировать. Не могу добавить более одной темы: Screenshot

Вот мои коды:

models.py:

class Subject(models.Model):
    def __str__(self):
        return self.name

    name = models.CharField(max_length=200)
    credit = models.IntegerField()

class Teacher(models.Model):
    def __str__(self):
        return self.name

    name = models.CharField(max_length=100)
    email = models.CharField(max_length=100, null=True)
    chair = models.ForeignKey(Chair, on_delete=models.CASCADE)
    academic_degree = models.CharField(max_length=100)
    subject = models.ForeignKey(Subject, on_delete=models.CASCADE)

Ответы [ 3 ]

1 голос
/ 05 ноября 2019

Вы делаете это иначе

Вы должны поместить 'ForeighKey' в модель 'Subject' вместо 'Teacher'

class Subject(models.Model):
    def __str__(self):
        return self.name

    name = models.CharField(max_length=200)
    credit = models.IntegerField()
    teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)

Это предполагает, что есть только 1учитель по предмету. Учитель может иметь несколько предметов. Если учителей по одному и тому же предмету много, вам нужно использовать отношение ManyToMany().

1 голос
/ 05 ноября 2019

Вы получили это наоборот. ForeignKey равно Много-к-одному с Многие являются экземплярами модели, в которой она определена;Вы объявили ForeignKey на модели Teacher для модели Subject, что означает, что «многие учителя могут преподавать только один предмет» - что должно быть наоборот.

Так определитеForeignKey к модели Teacher на модели Subject. И также сделайте то же самое для других подобных.

0 голосов
/ 05 ноября 2019

Django имеет чрезвычайно большую поддержку атрибута, связанного со многими другими атрибутами. В вашем случае один предмет может преподаваться несколькими преподавателями, а несколько преподавателей - одним. Чтобы определить отношения, как указано выше, вы можете использовать отношение ManyToMany (это облегчает связывание многих предметов с одним учителем). В случае, если вам нужна связь один ко многим, вы можете использовать отношение ManyToOne.

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