У меня есть следующие модели (они значительно упрощены):
class Job(models.Model):
name = models.CharField(max_length=255)
def get_date_details(self):
pass
#return a list of all jobdate --> details
class JobDate(models.Model):
job = models.ForeignKey(Job, on_delete=models.CASCADE, related_name='dates')
date = models.DateField()
# ... and a bunch of other fields
class JobDateDetail(models.Model):
job_date = models.ForeignKey(JobDate, on_delete=models.CASCADE, related_name='details')
detail = models.CharField(max_length=255)
# ... and a bunch of other fields
И регулярно нужно обрабатывать JobDateDetails
для всех заданий в базе данных (несколько тысяч). Я знаю, что могу предварительно выбрать все данные с помощью запроса:
q = Job.objects.all().prefetch_related('dates', 'dates__details')
Однако я не уверен, как наилучшим образом использовать предварительно выбранные данные в Job.get_date_details()
. Одним из вариантов будет сделать что-то вроде:
class Job(models.Model):
def get_date_details(self):
details = []
for job_date in self.dates.all():
details += [detail for detail in job_date.details.all()]
return details
Тем не менее, я подозреваю, что может быть способ запросить все эти JobDateDetail
объекты напрямую. Следует отметить одну вещь - как уже было сказано, я понимаю, что могу пойти в другом направлении, чтобы собрать все детали за один проход, однако в этом случае я использую Django Rest Framework и мне нужно собрать детали в виде поля в сериализаторе Job, требуя от меня идти в этом направлении. Мысли? * * 1013