Рассмотрим следующие модели:Django присоединиться запросы из нескольких моделей
class Employee(models.Model):
first_name = models.CharField(max_length=128)
last_name = models.CharField(max_length=128)
class MonthName(models.Model):
name = models.CharField(max_length=128)
class Month(models.Model):
name = models.ForeignKey(MonthName)
year = models.IntegerField()
class Group(models.Model):
name = models.CharField(max_length=128)
class EmployeeGroup(models.Model):
employee = models.ForeignKey(Employee)
month = models.ForeignKey(Month)
group = models.ForeignKey(Group)
class Status(models.Model):
name = models.CharField(max_length=128)
class EmployeeStatus(models.Model):
employee = models.ForeignKey(Employee)
month = models.ForeignKey(Month)
status = models.ForeignKey(Status)
Мне нужно, чтобы отобразить некоторые сотрудники с определенным статусом в указанном Месяца. Наряду с их именами мне нужно отображать имена групп, к которым они принадлежат. Я мог бы сделать что-то вроде этого:
statuses = models.EmployeeStatus.objects.filter(month=some_month, status__name="Current")
groups = models.EmployeeGroup.objects.filter(month=some_month)
Но присоединиться к этим запросы (предполагая, что некоторые сортировки) я бы итерацию над ними. Могу ли я поступить так иначе?
Похоже, там должно быть модель
class EmployeeData():
employee = models.ForeignKey(Employee)
month = models.ForeignKey(Month)
group = models.ForeignKey(Group)
status = models.ForeignKey(Status)
Но перепроектирование приложения является последним средством - у нас есть много данных уже.
Извините, но я не могу понять эту часть' select_related'. Не могли бы вы указать мне в правильном направлении, пожалуйста? – MoonWolf
@MoonWolf - ['select_related'] (https://docs.djangoproject.com/en/1.10/ref/models/querysets/#select-related) (см. Также prefetch_related), используемый для остановки django для выполнения дополнительных запросов получать связанные модели – Sayse