У меня есть следующие модели, которые описывают сотрудников на работе:
class Job(models.Model):
name = models.CharField(max_length=255)
address = models.CharField(max_length=255)
# Several other Job related fields
class CrewAssignment(models.Model):
job = models.ForeignKey(Job, on_delete=models.PROTECT, related_name='crew_assignments')
user = models.ForeignKey(User, on_delete=models.PROTECT)
date = models.DateField()
# Several other crew related fields
class SubAssignment(models.Model):
job = models.ForeignKey(Job, on_delete=models.PROTECT, related_name='crew_assignments')
user = models.ForeignKey(User, on_delete=models.PROTECT)
date = models.DateField()
# Several other sub related fields
Учитывая пользователя u
и дату d
, я пытаюсь собрать запрос, который вернет все Job
сущности, которые u
были либо CrewAssignment
, либо SubAssignment
, с датой на d
или после нее, аннотированной датой. Например, если d
- это 2020-08-06, и у пользователя есть следующие назначения:
CrewAssignment | Job id 1 | 2020-08-06
SubAssignment | Job id 2 | 2020-08-06
CrewAssignment | Job id 1 | 2020-08-07
CrewAssignment | Job id 3 | 2020-08-07
SubAssignment | Job id 3 | 2020-08-07
На заметку - пользователь выполнял задание 1 несколько дней (поэтому должен быть запись на каждый день), и пользователь был CrewAssignment и SubAssignment для Job 3 в один и тот же день, что должно создать только одну запись. Я хотел бы, чтобы мой результат выглядел примерно так:
[
<Job: [pk:1], annotated with date='2020-08-06'>,
<Job: [pk:2], annotated with date='2020-08-06'>,
<Job: [pk:1], annotated with date='2020-08-07'>,
<Job: [pk:3], annotated with date='2020-08-07'>
]
Другими словами - для данного пользователя, какие комбинации Job / Date были CrewAssignment
и / или SubAssignment
для всех дат больше или равно d
Примечание. Это должен быть один набор запросов, так как он будет передан сериализатору DRF.
Есть мысли о том, как лучше всего подойти к этому?