Таблица как поле в модели - PullRequest
0 голосов
/ 23 октября 2019

У меня есть такие модели:

class Department(models.Model):
    name = models.CharField(max_length=30)
    schedule = models.ForeignKey('Schedule', on_delete=models.CASCADE)


class Schedule(models.Model):
    post_name = models.CharField(max_length=30)
    shift_start = models.TimeField(auto_now=False, auto_now_add=False)
    shift_end = models.TimeField(auto_now=False, auto_now_add=False)

У каждого отдела есть расписание - несколько [post_name, shift_start, shift_end] строк для каждого поста. Если использовать ForeignKey, то будет только одна строка вместо списка. Можно ли создать несколько Schedule таблиц и связать каждую с определенным Department?

1 Ответ

1 голос
/ 23 октября 2019

Внешний ключ определяет отношение от 1 до N между вашими моделями. Если я правильно понял, вы бы хотели, чтобы в 1 отделе было N расписаний. Для достижения этого каждый график должен иметь внешний ключ, определяющий, к какому отделу он принадлежит.

Таким образом, вы должны использовать ForeignKey для этого, но указать его в вашей Schedule модели.

ЗдесьВот как это должно выглядеть:

class Department(models.Model):
    name = models.CharField(max_length=30)


class Schedule(models.Model):
    post_name = models.CharField(max_length=30)
    shift_start = models.TimeField(auto_now=False, auto_now_add=False)
    shift_end = models.TimeField(auto_now=False, auto_now_add=False)
    department = models.ForeignKey(Department, on_delete=models.CASCADE, related_name='schedules')

Затем, после того как вы создали отдел и пару расписаний для этого отдела, вы можете получить к ним доступ следующим образом: (допустим, первичный ключ созданного отдела равен 1)

Department.objects.get(pk=1).schedules.all()
...